WPF Dispatcher及執行緒

2022-04-04 07:17:35 字數 880 閱讀 7217

一.

二   .begininvoke和invoke的區別

invoke:在擁有該控制項的基礎視窗控制代碼的執行緒上執行制定的委託,也就是會阻塞呼叫執行緒。

begininvoke非同步,非阻塞。   

1. c#多執行緒 invoke方法的使用

在多執行緒程式設計中,我們經常要在工作執行緒中去更新介面顯示,而在多執行緒中直接呼叫介面控制項的方法是錯誤的做法,invoke 和 begininvoke 就是為了解決這個問題而出現的,使你在多執行緒中安全的更新介面顯示。

正確的做法是將工作執行緒中涉及更新介面的**封裝為乙個方法,通過 invoke 或者 begininvoke 去呼叫,兩者的區別就是乙個導致工作執行緒等待,而另外乙個則不會。

2.

通過乙個委託來進行同步方法的非同步呼叫,也是.net提供的非同步呼叫機制之一。但是delegate.begininvoke方法是從threadpool取出乙個執行緒來執行這個方法,以獲得非同步執行效果的。也就是說,如果採用這種方式提交多個非同步委託,那麼這些呼叫的順序無法得到保證。而且由於是使用執行緒池裡面的執行緒來完成任務,使用頻繁,會對系統的效能造成影響。

delegate.begininvoke也是講乙個委託方法封送到其它執行緒,從而通過非同步機制執行乙個方法。呼叫者執行緒則可以在完成封送以後去繼續它的工作。但是這個方法封送到的最終執行執行緒是執行庫從threadpool裡面選取的乙個執行緒。

這裡需要糾正乙個誤區,那就是control類上的非同步呼叫begininvoke並沒有開闢新的執行緒完成委託任務,而是讓介面控制項的所屬執行緒完成委託任務的。看來非同步操作就是開闢新執行緒的說法不一定準確。

pthread join函式及linux執行緒

分類 程式相關 2008 05 08 18 14 1045人閱讀收藏 舉報pthread join使乙個執行緒等待另乙個執行緒結束。中如果沒有pthread join主線程會很快結束從而使整個程序結束,從而使建立的執行緒沒有機會開始執行就結束了。加入pthread join後,主線程會一直等待直到等...

pthread join函式及linux執行緒

pthread join使乙個執行緒等待另乙個執行緒結束。中如果沒有pthread join主線程會很快結束從而使整個程序結束,從而使建立的執行緒沒有機會開始執行就結束了。加入pthread join後,主線程會一直等待直到等待的執行緒結束自己才結束,使建立的執行緒有機會執行。所有執行緒都有乙個執行...

pthread join函式及linux執行緒

pthread join函式及linux執行緒 pthread join使乙個執行緒等待另乙個執行緒結束。中如果沒有pthread join主線程會很快結束從而使整個程序結束,從而使建立的執行緒沒有機會開始執行就結束了。加入pthread join後,主線程會一直等待直到等待的執行緒結束自己才結束,...