private void LoadDG()
{
DG dg = new DG(TimeState);
while(true)
{
this.Invoke(dg,null);
Thread.Sleep(5000); //如何保证dg完成向服务器请求的数据后再执行下一次while呢 休眠好像总是使界面假死
}
}
还有this.Invoke(dg,null);第二个参数传i变量 为什么程序一执行立即退出呢
c# 线程休眠问题
答案:2 悬赏:20 手机版
解决时间 2021-01-31 02:00
- 提问者网友:星軌
- 2021-01-30 02:47
最佳答案
- 五星知识达人网友:空山清雨
- 2021-01-30 03:10
你没参数传什么参数。
this.Invoke(dg);就可以了。
算了,费话少说,百度HI上问我就行了。
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();
}
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯