永发信息网

c# 线程休眠问题

答案:2  悬赏:20  手机版
解决时间 2021-01-31 02:00
  • 提问者网友:星軌
  • 2021-01-30 02:47
private void LoadDG()
{
DG dg = new DG(TimeState);
while(true)
{
this.Invoke(dg,null);
Thread.Sleep(5000); //如何保证dg完成向服务器请求的数据后再执行下一次while呢 休眠好像总是使界面假死
}
}
还有this.Invoke(dg,null);第二个参数传i变量 为什么程序一执行立即退出呢
最佳答案
  • 五星知识达人网友:空山清雨
  • 2021-01-30 03:10
你没参数传什么参数。
this.Invoke(dg);就可以了。
算了,费话少说,百度HI上问我就行了。
全部回答
  • 1楼网友:胯下狙击手
  • 2021-01-30 04:11
线程的挂起与恢复,不推荐使用thread..::.suspend 和thread..::.resume方法。你可以通过autoresetevent 来控制挂起和恢复,用sleep来暂停线程执行。 autoresetevent 允许线程通过发信号互相通信。通常,此通信涉及线程需要独占访问的资源。 线程通过调用 autoresetevent 上的 waitone 来等待信号。如果 autoresetevent 处于非终止状态,则该线程阻塞,并等待当前控制资源的线程 通过调用 set 发出资源可用的信号。 调用 set 向 autoresetevent 发信号以释放等待线程。autoresetevent 将保持终止状态,直到一个正在等待的线程被释放,然后自动返回非终止状态。如果没有任何线程在等待,则状态将无限期地保持为终止状态。 可以通过将一个布尔值传递给构造函数来控制 autoresetevent 的初始状态,如果初始状态为终止状态,则为 true;否则为 false。 通俗的来讲只有等myreseteven.set()成功运行后,myreseteven.waitone()才能够获得运行机会;set是发信号,waitone是等待信号,只有发了信号, 等待的才会执行。如果不发的话,waitone后面的程序就永远不会执行。 class class1 { public static bool ok = false; static autoresetevent are = new autoresetevent(false); public void add() { while(true){ if (ok) { console.writeline("你好"); thread.sleep(1000); } else { console.writeline("我等待"); are.waitone(); } } } public static void begin(){ ok = true; are.set(); } public static void end() { ok = false; } } class program { public static void main(string[] args) { thread t = new thread(new threadstart(new class1().add)); thread.currentthread.name = "主线程"; t.start(); t.name = "class1线程"; for (int i = 0; i { console.writeline(i); thread.sleep(1000); } class1.begin(); for (int i = 0; i { console.writeline(i); thread.sleep(1000); } class1.end(); t.abort(); console.writeline(t.name + "状态:" + t.threadstate); console.readline(); } }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯