首页 新闻 搜索 专区 学院

关于winform 进度条的问题????

0
[已解决问题] 解决于 2010-12-11 10:53

我参考下面的代码实现了一模式窗口的进度条,现在我想通过这个实例实现下面的功能,就是在这个进度条开始阶段要先去检查网络连接状况是否良好,网络不通中断这个进度条弹出提示窗口,否则去执行获取数据的过程。这个怎么来改一下,试了半天,还是不行。实现效果不好,是不是得用多线程才能实现。哪位帮我改改吧。谢谢。不好意思,没分了。。。。。。。。。。。

/// <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 );
  }  

启动线程,可以如下: 
Thread thdSub = new Thread( new ThreadStart( ThreadFun ) );
 thdSub.Start();

mysun的主页 mysun | 初学一级 | 园豆:14
提问于:2010-11-02 22:25
< >
分享
最佳答案
0

单现成实现,客户体验不咋地。

多线程是最好的,如果问题是进度条的话,.net提供了专门处理进度条的组件。可以方便的实现该功能。

BackgroundWorker和ProgressBar 。

大概实现流程:1、拖放组件在目标界面。

2、在需要启动进度条的函数中操作backgroundworker进行后台线程的逻辑处理。

3、backgroundworker执行函数中以委托实现安全的两个线程之间的通信。

4、完成后调用backgroundworker的完成触发事件进行完毕操作。

网上例子很多,找找吧。关键字:backgroundworker 、进度条

邢少 | 专家六级 |园豆:10926 | 2010-11-03 08:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册