説明 (.Net Framework 3.5/Windows7/VS12) : 1) 操作は非同期で実行できるタイプです。次のように、 Executed という名前のイベントを通じて他のオブジェクトに通知します。
_Operation.Executed += OperationExecuted;
2) このイベント内で、次のように StopProgress() を呼び出します。
private void OperationExecuted (object sender, OperationEventArgs e)
{
StopProgress();
}
3) StopProgress() は次のとおりです。
public void StopProgress()
{
if (InvokeRequired)
{
Invoke(new MethodInvoker(StopProgress));
return;
}
lblTemp.Text = "operation complete. ";// 1
//progressBar1.Visible = false; // 2
// with added locks the app totally hangs
//lock (progressBar1)
//{
// progressBar1.Visible = false;
//}
}
"1" とマークされた行 ( StopProgress() 内) にコメントを付け、"2" のコメントを外す (これは望ましい動作です) と、ときどき競合状態に遭遇します (アプリを 5 ~ 10 回実行した後、競合状態に遭遇します)。行「1」では、それは決して起こりません。スローされる例外もありません(キャッチ/アンキャッチ)。問題は「ProgressBar」自体に関連していると想定しています。そうでない場合、おそらくここではどうなるでしょうか。競合状態 (脆弱なコード セクション) を追跡する方法に関する提案も大歓迎です。ありがとう。