C#从主线程调用时,我的第二个是灰色的

时间:2013-09-30 14:51:09

标签: c# .net multithreading .net-4.0

使用主线程: 当我的表单显示时,所有字段都是灰色的,并且表单的所有更新也都是灰色的。

StopServicesForm stopservices = new StopServicesForm(
cicsRegionSelected, serverSelected);
stopservices.Show();
stopservices.stopAppServerService();

*On page load*
private void StopServicesForm_Load(object sender, EventArgs e)
{
   Region_label.Visible = true;
   displayregion_label.Visible = true;
   StoppingServicelabel1.Visible = true;
   ServiceNamelabel.Visible = true;
   Service_progressBar1.Visible = true;
}

使用新线程: Join方法似乎将第二种形式显示为模态窗口。显示所有字段,但在线程运行时不更新字段。

StopServicesForm stopservices = new StopServicesForm(
cicsRegionSelected, serverSelected);
stopservices.Sendstopserviceupdate = new
StopservicethreadCompleted(StopServicethreadCompleteCallback);
Thread thread = new Thread(stopservices.stopAppServerService);
stopservices.Show();
thread.Start();
thread.Join();  

我正在使用以下委托实例来更新表单,因为我正在使用新线程。

SetTextCallback setSet_tbServiceNameText = new SetTextCallback(results.Set_tbServiceName);            
UpdateProgressDelegate updateprog = new UpdateProgressDelegate(UpdateprogressBar);
UpdateServicetoStopLabel updateserviceName = new UpdateServicetoStopLabel(UpdateServicetostopLabel);

如果我不使用Join方法,除了我的主要运行仍然结束之外,一切正常;在新线程完成之前终止应用程序。 我花了一些时间试图解决这个问题,所以任何帮助都会得到很大的帮助。 谢谢!

1 个答案:

答案 0 :(得分:0)

您应该使用ShowDialog将表单显示为模式对话框,而不是通过Join调用阻止UI线程。