在新线程中打开窗口C#例子

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yang141/article/details/78961789
 在新线程中打开窗口
 
 using System.Threading;//引用此命名
 
  //创建代理。
  private Form6 myProcessBar = null; //弹出的子窗体(用于显示进度条)
  private delegate bool IncreaseHandle(int nValue,string vinfo);//代理创建
  private IncreaseHandle myIncrease = null;//声明代理,用于后面的实例化代理
  private int vMax = 100; //用于实例化进度条,可以根据自己的需要,自己改变


  private void button1_Click(object sender, EventArgs e)
  {
      Thread thdSub = new Thread(new ThreadStart(ThreadFun));
      thdSub.Start();
  }
  private void ThreadFun()
  {
      MethodInvoker mi = new MethodInvoker(ShowProcessBar);
      this.BeginInvoke(mi);
      Thread.Sleep(100);
      object objReturn = null;
      for (int i = 0; i < vMax; i++)
      {
          objReturn = this.Invoke(this.myIncrease, new object[] { 2, i.ToString() + "\r\n" });
          Thread.Sleep(50);
      }
  }
  private void ShowProcessBar()
  {
      myProcessBar = new Form6(vMax);
      myIncrease = new IncreaseHandle(myProcessBar.Increase);
      myProcessBar.ShowDialog();
      myProcessBar = null;
  }
        
Form code        
public Form6(int vMax)
{
    InitializeComponent();
    this.progressBar1.Maximum = vMax;
}
public bool Increase(int nValue,string nInfo)
{
    if (nValue > 0)
    {
        if (progressBar1.Value + nValue < progressBar1.Maximum)
        {
            progressBar1.Value += nValue;
            this.textBox1.AppendText(nInfo);
            Application.DoEvents();
            progressBar1.Update();
            progressBar1.Refresh();
            this.textBox1.Update();
            this.textBox1.Refresh();
            return true;
        }
        else
        {
            progressBar1.Value = progressBar1.Maximum;
            this.textBox1.AppendText(nInfo);
            //this.Close();//执行完之后,自动关闭子窗体
            return false;
        }
    }
    return false;
}     
展开阅读全文

没有更多推荐了,返回首页