在C#中要實現顯示進度條,只要通過C#子線程控制進度條即可。至於彈出一個模式窗口來 顯示進度條,則可以按照子線程的思路稍作修改。
C#進度條窗體
首先是進度條窗體,需要在上面添加進度條,然後去掉ControlBox。除此外,還要增加一 個方法,用來控制進度條的增加幅度,具體如下:
/// < summary>
/// Increase process bar
/// < /summary>
/// < param name="nValue">the value increased< /param>
/// < returns>< /returns>
public
bool
Increase(
int
nValue )
{
if
( nValue > 0 )
{
if
( prcBar.Value + nValue < prcBar.Maximum )
{
prcBar.Value += nValue;
return
true
;
}
else
{
prcBar.Value = prcBar.Maximum;
this
.Close();
return
false
;
}
}
return
false
;
}
C#進度條:主窗體
接著就是主窗體了,如何進行操作了,首先需要定義兩個私有成員,一個委托。其中一個 私有成員是保存當前進度條窗體對象,另一個是保存委托方法(即增加進度條尺度),具體 如下:
private
frmProcessBar myProcessBar =
null
;
private
delegate
bool
IncreaseHandle(
int
nValue );
private
IncreaseHandle myIncrease =
null
;
接著要在主窗體中提供函數來打開進度條窗體,如下:
/// < summary>
/// Open process bar window
/// < /summary>
private
void
ShowProcessBar()
{
myProcessBar =
new
frmProcessBar();
// Init increase event
myIncrease =
new
IncreaseHandle( myProcessBar.Increase );
myProcessBar.ShowDialog();
myProcessBar =
null
;
}
C#進度條彈出窗口線程創建
那麼現在就可以開始創建線程來運行,具體如下:
/// < summary>
/// Sub thread function
/// < /summary>
private
void
ThreadFun()
{
MethodInvoker mi =
new
MethodInvoker( ShowProcessBar );
this
.BeginInvoke( mi );
Thread.Sleep( 1000 );//Sleep a while to show window
bool
blnIncreased =
false
;
object
objReturn =
null
;
do
{
Thread.Sleep( 50 );
objReturn =
this
.Invoke(
this
.myIncrease,
new
object
[]{ 2 } );
blnIncreased = (
bool
)objReturn ;
}
while
( blnIncreased );
}
注意以上,在打開進度條窗體和增加進度條進度的時候,一個用的是BeginInvoke,一個 是Invoke,這裡的區別是BeginInvoke不需要等待方法運行完畢,而Invoke是要等待方法運行 完畢。還有一點,此處用返回值來判斷進度條是否到頭了,如果需要有其他的控制,可以類 似前面的方法來進行擴展。
啟動線程,可以如下:
Thread thdSub =
new
Thread(
new
ThreadStart( ThreadFun ) );
thdSub.Start();
這樣,一個用模式打開進度條窗體就做完了。