cf客服电话号码:关于线程的结束问题

来源:百度文库 编辑:神马品牌网 时间:2024/04/17 07:46:30
我建立个Form1和Form2两个窗体,在Form1中用一个toolBar调用Form2中的一个progressBar,当我在Form1中建立一个线程调用progressBar的时候:
用Abort(),则进程结束,但是获取的状态为Stopped而不是Aborted,并且在Form2没有关闭的情况下可以再次激活,而Form2关闭了就不能再次使用线程了,请问为什么?

我查资料说:如果调用了Abort(),则线程终止不能调用,那状态应该是Aborted而不应该是Stopped。

代码大致如下:

Form2:
public void MyCalculate()
{
while(true)
{
for(int i=0;i<1000;i++)
{
for (int j=0;j<1000;j++)
{
double k=123.456;
}
}

progress.Value%=progress.Maximum;
progress.Value++;
}
}

Form1:

private Thread calcThread;
private Form2 calcForm;

private void Form1_Load(object sender, System.EventArgs e)
{
calcForm=new Form2();
calcForm.Hide();
}

private void toolBar1_ButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e)
{
switch(toolBar1.Buttons.IndexOf(e.Button))
{
case 0:

if(calcThread==null||calcThread.ThreadState==ThreadState.Stopped)
{
calcForm.Show();
calcThread=new Thread(new ThreadStart(calcForm.MyCalculate));
calcThread.Priority=ThreadPriority.Normal;
calcThread.Start();
}
break;
case 1:
Thread.Sleep(10*1000);
break;
case 2:
if(calcThread.ThreadState==ThreadState.Running)
{
calcThread.Suspend();
e.Button.Text="Resume";
}
else if(calcThread.ThreadState==ThreadState.Suspended)
{
calcThread.Resume();
e.Button.Text="Suspend";

}
break;
case 3:
if(calcThread.IsAlive)
{
calcThread.Abort();
calcForm.Hide();

}
break;
}

}

}