子執行緒控制主線程中UI顯示

2021-04-23 05:30:34 字數 1553 閱讀 7765

最近看了好多人問這方面的問題,以前我也寫過一篇

blog

,裡面說了如何在子執行緒中控制進度條。但目前大多數環境,需要彈出模式視窗,來顯示進度條,那麼只需要在原先的基礎上稍作修改即可。

首先是進度條窗體,需要在上面新增進度條,然後去掉

controlbox

。除此外,還要增加乙個方法,用來控制進度條的增加幅度,具體如下:

//////

increase process bar

//////

the value increased

///public

bool increase( int nvalue )

else

}return

false;

} 接著就是主窗體了,如何進行操作了,首先需要定義兩個私有成員,乙個委託。其中乙個私有成員是儲存當前進度條窗體物件,另乙個是儲存委託方法(即增加進度條尺度),具體如下:

private frmprocessbar myprocessbar = null;

private

delegate

bool increasehandle( int nvalue );

private increasehandle myincrease = null;

接著要在主窗體中提供函式來開啟進度條窗體,如下:

//////

open process bar window

///private

void showprocessbar()

那麼現在就可以開始建立執行緒來執行,具體如下:

//////

sub thread function

///private

void threadfun()

);

blnincreased = (bool)objreturn ;

} while( blnincreased );

}

注意以上,在開啟進度條窗體和增加進度條進度的時候,乙個用的是

begininvoke

,乙個是

invoke

,這裡的區別是

begininvoke

不需要等待方法執行完畢,而

invoke

是要等待方法執行完畢。還有一點,此處用返回值來判斷進度條是否到頭了,如果需要有其他的控制,可以類似前面的方法來進行擴充套件。

啟動執行緒,可以如下:

thread thdsub = new thread( new threadstart( threadfun ) );

thdsub.start();

這樣,乙個用模式開啟進度條窗體就做完了。

Android 在子執行緒中更新主線程UI

最近發現以前在eclipse中使用的runonuithread在studio中不能使了,所以又找了幾個更新ui的方法 第一種方法 new handler context.getmainlooper post new runnable 第二種方法 如果當前執行緒是ui執行緒,那麼行動是立即執行。如果當...

控制主線程與子執行緒執行順序

是從往往下順序執行,所以主線程執行完畢才能執行子執行緒,只要主線程 在子執行緒的start 方法之前就可以。子執行緒執行完畢,主線程才能繼續執行,最簡單方法是在主線程內子執行緒呼叫join 方法,如果是多個子執行緒執行完畢才能執行主線程,可以使用countdownlatch類。在主線程中執行awai...

主線程和子執行緒

子執行緒通過 handlerthread的thread.getlooper 繫結,在主線程的handler的handlermessage中呼叫threadhandler.sendmessagedelay msg,1000 向子執行緒傳送訊息。在子執行緒中通過handler.sendmessagede...