C winform中UI執行緒與工作執行緒的互動

2021-04-15 23:21:01 字數 2060 閱讀 6189

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...