一、多執行緒實時監控控制項
一、前言
對於多執行緒實時監控控制項,其實現原理無外乎另開乙個執行緒每隔一定時間進行實時監控。大多是使用
timer控制項,而system.windows.forms.timer則是主線程執行的,故不能實現。
二、.net提三種記時器
1,system.timers.timer:
這個timer是使用執行緒池中的執行緒去執行任務的,可以指定執行緒池中的某個執行緒去執行任務。
基於伺服器的計時器是為在多執行緒環境下與輔助線程一起使用而設計的。由於它們使用不同的體系
處理引發的事件。
2,system.threading.timer:
和1中的timer類似也是使用執行緒池中的執行緒去執行任務的,但是不可以指定執行緒池中的某個執行緒去
執行任務。
特點:使用imercallback委託指定希望timer執行的方法。此方法不在建立計時器的執行緒中執行,
而是在系統提供的執行緒池執行緒中執行。
3,system.windows.forms.timer:
該timer的特點是執行任務的執行緒是專屬於任務相關視窗的。決不能用這個timer執行時間太長(例
如幾分之一秒)的任務,否則會造成介面無響應。
特點:計時器是為單執行緒環境設計的,其中,ui執行緒用於執行處理。windows 計時器的精度限定
為55毫秒。這些傳統計時器要求使用者**有乙個可用的 ui 訊息幫浦,而且總是在同乙個執行緒中操作,或
者將呼叫封送到另乙個執行緒。
三、實現
使用system.threading.timer,另開執行緒進行控制。如下:下面**功能為,實現緊急案件的實時
檢測,並發現案件是,提醒處理,其中包括提醒處理等操作均不影響主線程的執行,這是要達到的目標
。private enumdoingflag m_enumdoingflag = enumdoingflag.enumdoingflagnone;
private system.threading.timer m_timer;
public void startmonitor()
public void stopmonitor()
private idictionarym_dictevent = new dictionary();//案
件id,是否已經提醒
private void m_timer_ontickerevent(object obj)
}event arrayevent2 = new event[listevent.count];
listevent.copyto(arrayevent2, 0);
if (listevent.count != 0)
this.threadassitant(arrayevent2);
}catch
}private delegate void threadassitanthandler(event events);
private void threadassitant(event events));}
else
}四、注意事項
(1)對於多執行緒實時監控控制項monitorservice必須繼承與基類form,而不能繼承與control或
usercontrol。因為如果繼承至control或usercontrol則只有在新增到form且show後在可用,否則無法刷
新。(2)為例在使用**例項化時能夠實現觸發的重新整理,需要在建構函式中先把控制項顯示再隱藏,做如下
處理。//解決重新整理問題
base.width = 1;
base.height = 1;
base.windowstate = formwindowstate.minimized;
base.showintaskbar = false;
base.show();
base.hide();
五、總結
對於多執行緒實時監控的控制項實現原理大抵如此,變換可實現不同的應用。
二、c#中構建多執行緒應用程式(1)
多執行緒相關
多執行緒示例 public class threadtest start new thread new runnable start new thread new runnable start class print public void print2 public void print3 上面的...
多執行緒相關
1.synchronized同步方法 方法內的變數為執行緒安全的 執行緒中的例項變數非執行緒安全,易出現髒讀,方法上加synchronized關鍵字 多個執行緒訪問同乙個物件的同步方法時,執行緒安全 synchronized取得的鎖都是物件鎖,而不是把一段 或者方法當作鎖 多個執行緒訪問多個物件的同...
多執行緒相關
方法1 public class threadcreat 方法2 新建乙個類繼承thread類,thread類本身實現了runnable介面,可以通過繼承重寫thread類的run方法 實現runnable介面而來 來寫執行緒的執行體,然後例項化這個新建的類來新建乙個執行緒 1.同步阻塞 想要獲得鎖...