在新线程中打开窗口
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;
}
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;
}