C開啟執行緒,其中執行sleep2秒,主執行緒相應按鈕事件不是每次都成功

2022-07-15 07:26:31 字數 4219 閱讀 6768

1樓:空號一號

程式設計問題請貼**。你是在按鈕的事件響應中開啟執行緒的嗎?什麼叫事件成功?

2樓:匿名使用者

貼**,什麼都沒有神能回答你

c#熟悉多執行緒的朋友來看一個問題,如何設定執行緒睡眠2秒鐘?

3樓:逍遙天

贊同 33xiaobai 說法

我開啟了2個執行緒,執行緒1休眠15秒,執行緒2休眠5秒結果如下:

2012-11-15 10:24:51 | 執行緒2開始休眠2012-11-15 10:

24:56 | 執行緒2休眠結束2012-11-15 10:24:

56 | 執行緒2開始休眠2012-11-15 10:25:01 | 執行緒2休眠結束2012-11-15 10:

25:01 | 執行緒2開始休眠2012-11-15 10:25:

06 | 執行緒1休眠結束2012-11-15 10:25:06 | 執行緒1開始休眠2012-11-15 10:

25:06 | 執行緒2開始休眠2012-11-15 10:25:

11 | 執行緒2休眠結束2012-11-15 10:25:11 | 執行緒2開始休眠2012-11-15 10:

25:16 | 執行緒2休眠結束2012-11-15 10:25:

16 | 執行緒2開始休眠2012-11-15 10:25:21 | 執行緒1休眠結束2012-11-15 10:

25:21 | 執行緒1開始休眠2012-11-15 10:25:

26 | 執行緒2休眠結束2012-11-15 10:25:26 | 執行緒2開始休眠2012-11-15 10:

25:31 | 執行緒2休眠結束2012-11-15 10:25:

31 | 執行緒2開始休眠從結果可以看出,執行緒1在休眠過程,執行緒2還是在繼續執行,各執行緒休眠互不影響,休眠時間不會累加

4樓:風寶寶

system.threading.thread.sleep(2000);作用是讓當前執行緒,睡一會兒,在哪個執行緒用就是哪個睡。

5樓:匿名使用者

1.是的。

thread.sleep() 方法,它有兩個過載方法(sleep(int )、sleep(timespan )),只不過是表示時間量的格式不同而已,當在某執行緒內呼叫此函式時,它表示此執行緒將阻塞一段時間(時間是由傳遞給 sleep 的毫秒數或timespan決定的,但若引數為0則表示掛起此執行緒以使其它執行緒能夠執行,指定 infinite 以無限期阻塞執行緒)

2.沒有

sleep()函式被定義為了static?! 這也意味著它不能和某個執行緒例項結合起來用,也即不存在類似於t1.sleep(10)的呼叫!

正是如此,sleep()函式只能由需「sleep」的執行緒自己呼叫,不允許其它執行緒呼叫,正如when to sleep是個人私事不能由它人決定

6樓:立花裡子來米蘭

1,對的

2.sleep呼叫有根據pid號睡眠的版本吧,查查。

c#如何讓一個執行緒一直等待直到到一個事件的發生,然後處理完後繼續等待

7樓:匿名使用者

用非同步就可以了。

自定義泛型類,新增add事件,偵聽這個事件就行了。

8樓:匿名使用者

可以直接在那個事件中start這個執行緒

c#中sleep()並不能讓子執行緒休息

9樓:

你的this.test_thing();位於main()因而...thread.

sleep(8000);...執行於main() 所處的執行緒,這裡thread代表的是主執行緒,所以sleep的是主執行緒

改成newthread.sleep(1000)就行了,或者到startwork裡面去執行thread.sleep(1000)。

10樓:

你需要指定時間的,單位為毫秒

而且注意寫的地方,在哪個執行緒中寫就是哪個執行緒休息

補充:不太明白你什麼意思,你的**是:

threadstart = new threadstart(startwork); // 建立一個startwork方法的委託

newthread = new thread(threadstart); // 建立一個使用委託的執行緒

newthread.start(); // 執行緒開始執行

this.test_thing(); 呼叫了this_thing()函式,因為this_thing是在主程序中執行的,所以掛起的是主程序而不是startwork

這樣才對,你卻說他掛起了threadstart程序,這是什麼意思?若你想要startwork掛起,thread.sleep(8000)寫在startwork裡,在哪個執行緒中執行這個方法,就是掛起哪個執行緒

11樓:

thread th = new thread(new threadstart(test));

th.start();

void test()}

12樓:傲世修羅王

你怎麼知道子執行緒沒休息?**呢?

c# 建立2個執行緒掛起,讓這個執行緒內的不同事件每隔5秒執行一次,怎麼實現?

13樓:

如果你沒有必要對這個類嚴格控制的話(比如掛起操作 控制優先順序操作等等)

建立兩個timer就好了 timer使用的是執行緒池的執行緒 達到的效果是一樣的

new threadstart(delegate());

14樓:瘋寶寶love思憶

執行一下 休眠5秒 就可以了

15樓:勵龍友蘭芝

c#中執行緒掛起相當於該執行緒暫時不繼續執行下去了,如果從**去看就是suspend執行了以後這個執行緒就停在掛起時執行的那句**上了,掛起後恢復就相當於執行緒繼續從掛起時停留的**上開始繼續向下執行了,相當於跑步時候的停止與繼續起跑動作

c#中如何開啟一個執行緒?條件是 1.主介面不能卡死。 2.這個執行緒在被主執行緒呼叫的時候有著嚴格的執

16樓:匿名使用者

static void main(string args)", n);

thread.sleep(n * 1000);

console.writeline("子執行緒完成");

});t.start();

while (t.threadstate != threadstate.stopped)

console.writeline("主執行緒完成");

console.readkey();}

c# 實現使用執行緒不用sleep,但不卡的功能

17樓:匿名使用者

winform中,介面和執行緒是可以分離的。

一個winform程式必須有一個主執行緒, 即ui執行緒,預設所有的**都是在ui執行緒裡執行, 所以如果某一行**耗時非常長,那麼介面就會卡住(假死),直到這行**執行完。

多執行緒就是為了解決這個問題的,

你需要開啟一個後臺執行緒

var thread = new system.threading.thread(new system.threading.threadstart(()

=>)) ;

thread.start();

如果你介面不需要直到結果,  那麼這樣就可以了,  介面執行緒永遠是無阻塞的,也就不會卡死。

但是如果你需要直到後臺執行緒處理的進度,(執行完了沒有?或者執行了百分之幾了?),

就需要從後臺執行緒把值**到ui執行緒, 這裡需要用到委託。

在類的上方宣告一個委託: 這裡是最簡單的bool型別的委託, 執行完了 就**一個true

18樓:狂奔的茶寶寶

用控制元件的begininvoke在非ui執行緒中操縱控制元件應該會好一點

19樓:陽光的雷咩咩

多執行緒啊,task,之類。

c# 多執行緒 新開子執行緒中暫停,呼叫主執行緒控制元件,如何防止ui阻塞?

20樓:匿名使用者

又是多執行緒,新開的子執行緒要訪問主執行緒的ui必須借用委託,不然.net的執行緒安全機制會報錯說不支援跨執行緒操作。搞個例子給你看看。

c多執行緒操作控制元件問題,C 多執行緒操作控制元件問題

一樓的答案不僅不是正解,而且還會報錯!正確的做法如下 thread th new thread new threadstart th.isbackground true 一定要標記為後臺執行緒,這樣這個執行緒才能在你的主執行緒停止後自動停止 th.start 總之一句話,繁瑣的業務操作放在非主執行緒...

c多執行緒方法控制兩個進度條,C 多執行緒方法 控制兩個進度條

最重要的是要實現非同步。其實就是你的 邏輯與介面呈現,非同步來做。互不干涉。用多執行緒吧。開條執行緒,執行你的 沒執行一次,就觸發個事件。介面就訂閱這個事件。每收到一次事件就更新一下進度條。非同步的處理。如果是 winform 那就 this.begininvoke 如果是 wpf,就 this.d...

計次迴圈如何讓他執行完我呼叫的執行緒,再繼續迴圈

我的理解 所謂多執行緒,就是系統分段 穿插執行 可以理解為,系統幫你新建了個程式,並同時執行這兩個程式,但是這兩個程式公用一個程式集 全域性變數程式集變數 i 型別 整數型 按鈕1 被單擊啟動執行緒 子程式1 子程式1判斷迴圈首 i 要迴圈的次數 i i 1子程式2 判斷迴圈尾 子程式2要執行的 子...