WEB开发网
开发学院软件开发C语言 C#进度条在弹出窗口中显示的实现 阅读

C#进度条在弹出窗口中显示的实现

 2010-09-30 20:57:03 来源:WEB开发网   
核心提示:在C#中要实现显示进度条,只要通过C#子线程控制进度条即可,C#进度条在弹出窗口中显示的实现,至于弹出一个模式窗口来显示进度条,则可以按照子线程的思路稍作修改,启动线程,可以如下:ThreadthdSub=newThread(newThreadStart(ThreadFun));thdSub.Start();这样,C#

在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(); 

这样,一个用模式打开进度条窗体就做完了。

Tags:进度 窗口 显示

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接