c#winform中ui執行緒與工作執行緒的互動
1.使用多執行緒
void calcpi(int digits)
void calcbutton_click(object sender,eventargs e)
void calcpithreadstart(object digits)
2.在ui執行緒中呼叫其它執行緒
使用了多執行緒,卻還有兩個問題(1)執行緒只能傳object型別引數(2)在新的執行緒中,不能直接修改窗體中的內容.事實上,在與ui互動時,我們一般並不用多執行緒,而是使用自定義委託.儘管這也是多執行緒的原理.但操作起來方便的多.
--1.同步呼叫
void calcpi(int digits)
delegate void calcpidelegate(int digits);
void calcbutton_click(object sender,eventargs e)
--2.非同步呼叫
void calcpi(int digits)
delegate void calcpidelegate(int digits);
void calcbutton_click(object sender,eventargs e)
void endcalcpi(iasyncresult result)
catch(exception ex)
3.在工作者執行緒中回撥ui執行緒
不管是同步呼叫還是非同步呼叫,如果在工作執行緒中需要顯示訊息到ui上,如在工作執行緒中發生異常或需要報知進度等,這時我們還需要回撥ui執行緒.回撥也分同步回撥與非同步回撥.
--1.同步回撥
將calcpi方法改為如下:
void showprogress(string pi,int totaldigits,int digitssofar)
delegate void showprogressdelegate(string pi,int totaldigits,int digitssofar);
void calcpi(int digits)
delegate void showprogressdelegate(string pi,int totaldigits,int digitssofar);
void calcpi(int digits)
void showprogress(string pi,int totaldigits,int digitssofar)
delegate void showprogressdelegate(string pi,int totaldigits,int digitssofar);
void calcpi(int digits)
void endcalcpi(iasyncresult result)
catch(exception ex)
void showprogress(string pi,int totaldigits,int digitssofar)
delegate void showprogressdelegate(string pi,int totaldigits,int digitssofar);
void calcpi(int digits)
void showprogress(string pi,int totaldigits,int digitssofar)
void endcalcpi(iasyncresult result)
catch(exception ex)
void showprogress(string pi,int totaldigits,int digitssofar)
delegate void showprogressdelegate(string pi,int totaldigits,int digitssofar);
void calcpi(int digits)
{stringbuilder pi=new stringbuilder("3",digits+2);
//準備顯示進度
showprogressdelegate showprogress=new showprogressdelegate(showprogress);
C WinForm跨執行緒修改UI介面
在我做winform開發的過程中,經常會遇到耗時操作或阻塞操作。他們會引發軟體的卡頓甚至假死,嚴重影響軟體的使用。因此,這類耗時或阻塞的操作一般都會使用非同步的方式去執行,不影響主線程 ui執行緒 與使用者間的互動。但多個執行緒競爭讀寫同乙個資源往往會造成意想不到的意外結果,ui介面也是一種資源,所...
UI執行緒與handle
handler是主線程和子執行緒的紐帶,當應用程式啟動時,android首先會開啟乙個主線程 也就是ui執行緒 主線程 為管理介面中的ui控制項,進行事件分發。如果此時需要乙個耗時的操作,例如 聯網讀取資料,或者讀取本地較大的乙個檔案的時候,你不能把這些操作放在主線程中,如果你放在主線程中的話,介面...
Qt中UI執行緒與子執行緒的互動
gui框架一般只允許ui執行緒操作介面元件,qt也是如此。但我們的應用程式一般是多執行緒的,勢必就涉及到ui執行緒與子執行緒的互動。下面介紹常用的ui執行緒與子執行緒互動方式,並附上自己的demo。qt中提供了一些執行緒安全的方法來讓我們使用 a.使用訊號槽 qt的訊號槽是執行緒安全的。connec...