• 易迪拓培训,专注于微波、射频、天线设计工程师的培养
首页 > HFSS > HFSS使用问答 > 如何弹出一个模式窗口来显示进度条

如何弹出一个模式窗口来显示进度条

录入:edatop.com     点击:

最近看了好多人问这方面的问题,以前我也写过一篇blog,里面说了如何在子线程中控制进度条。但目前大多数环境,需要弹出模式窗口,来显示进度条,那么只需要在原先的基础上稍作修改即可。

?

首先是进度条窗体,需要在上面添加进度条,然后去掉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;

??? }

?

接着就是主窗体了,如何进行操作了,首先需要定义两个私有成员,一个委托。其中一个私有成员是保存当前进度条窗体对象,另一个是保存委托方法(即增加进度条尺度),具体如下:

??? 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;

??? }

?

那么现在就可以开始创建线程来运行,具体如下:

??? /// <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();

?

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

申明网友回复良莠不齐,仅供参考。如需专业解答,请学习易迪拓培训专家讲授的HFSS视频培训教程

上一篇:ANSYS18.0安装步骤
下一篇:信号完整性之差分对设计5(差分对布线)

HFSS视频培训课程推荐详情>>
HFSS教程推荐

  网站地图