c#執行緒暫停與繼續解決方案
昨天, 老師要我們每個人交乙個關於黑客方面的程式,想了半天發現埠掃瞄工具好像好寫點,從昨天寫到今天基本快完成了,給大家看下效果,不要笑話我哦哦(~~)
圖1 埠掃瞄器
這個程式裡面有一些地方不太滿意,就是掃瞄的暫停與繼續實現時,使用的是thread.suspend和thread.resume而這兩個方法,在vs2010裡提示已經過時,不建議使用,在網上查閱了一些資料,發現有個事件通知的方法很好,事件通知的大致原理是,執行緒在執行過程中暫停,等到其他執行緒通知時才繼續執行下去,這樣的確是可以起到暫停與繼續的效果。但是,這種暫停是被動的,我需要的是主動暫停,即點下按鈕,執行緒暫停,再點下按鈕,執行緒繼續執行。
下面是乙個下的demo:
執行截圖:
圖2 demo執行效果
c#源**:
usingsystem;
usingsystem.windows.forms;
usingsystem.threading;
namespace執行緒暫停與繼續實現
publicpartialclassform1 : form
//計時器
privatesystem.windows.forms.timer tm =newsystem.windows.forms.timer();
//自動重置事件類
//主要用到其兩個方法 waitone() 和 set() , 前者阻塞當前執行緒,後者通知阻塞執行緒繼續往下執行
autoresetevent autoevent = newautoresetevent(false);
publicform1()
initializecomponent();
progressbar.checkforillegalcrossthreadcalls = false;
tm.interval = 1;
tm.tick += neweventhandler(tm_tick);
//計時器 事件
voidtm_tick(objectsender, eventargs e)
autoevent.set(); //通知阻塞的執行緒繼續執行
//啟動
privatevoidbtnstart_click(objectsender, eventargs e)
tm.start();
thread t = newthread(dowork);
t.start();
privatevoiddowork()
while(progressbar1.value < progressbar1.maximum)
progressbar1.performstep();
autoevent.waitone(); //阻塞當前執行緒,等待通知以繼續執行
//暫停
privatevoidbtnsuspend_click(objectsender, eventargs e)
tm.stop();
//繼續
privatevoidbtnresume_click(objectsender, eventargs e)
tm.start();
執行緒暫停和繼續實現
開啟乙個子執行緒來顯示發動機上的執行時間,如果發動機暫停執行,那麼這個執行緒也會暫停,發動機又開動的時候,執行緒繼續開啟,資料也是連貫著的 timer timer newtimer timertask task newtimertask timer.schedule task,0 這樣的用法只能停止...
動畫暫停與繼續
暫停 計算暫停時間 cftimeinterval pausetime myview.layer converttime cacurrentmediatime fromlayer nil 把圖層速度設定為0 myview.layer speed 0 設定時間偏移值為暫停時時間 myview.layer...
C 執行緒暫停與繼續解決方案
昨天,老師要我們每個人交乙個關於黑客方面的程式,想了半天發現埠掃瞄工具好像好寫點,從昨天寫到今天基本快完成了,給大家看下效果,不要笑話我哦哦 圖1 埠掃瞄器 這個程式裡面有一些地方不太滿意,就是掃瞄的暫停與繼續實現時,使用的是thread.suspend和thread.resume而這兩個方法,在v...