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 メソッドは、2 番目のフォームをモーダル ウィンドウとして表示するようです。すべてのフィールドが表示されますが、スレッドの実行中はフィールドは更新されません。

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 Method を使用しない場合、メインの実行以外はすべて機能します。新しいスレッドが完了する前にアプリを終了します。私はこれを理解しようとするのに時間を費やしたので、どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

0

ShowDialog呼び出しによって UI スレッドをブロックするのではなく、フォームをモーダル ダイアログとして表示するために使用する必要がありJoinます。

于 2013-09-30T14:53:30.587 に答える