VS2010UltimateでTPLを使用してアプリを構築しています。ほとんどの場合、アプリを実行すると、UIのスレッドからDoRepresentation()を呼び出すと応答しなくなります。
void DoRepresentation()
{
Parallel.ForEach(cgs, loopOptions, g =>
{
UpdateRepresentation(g);
});
}
void UpdateRepresentation(object g)
{
view.Invoke(new Action(() =>
{
representation = new MyRepresentation(g);
}));
}
アプリが応答しなくなった理由がわかりません。デッドロックが発生していますか?
MyRepresentation内で、OpenGLを呼び出します。
ビューは、Form1(メインフォーム)内のコントロールです。
アプリが応答しなくなったら、VSIDEから一時停止します。取得した情報は次のとおりです。
[並列タスク]ウィンドウで、次のように表示されます。
ID Status Message<br>
1 ?Waiting Task1 is waiting on object: "Task2"<br>
2 ?Waiting No waiting information available<br>
[コールスタック]ウィンドウで、次の情報が表示されます。
[In a Sleep, wait, or join]<br>
[External Code]<br>
Test.dll!Render.DoRepresentation()<br>
App1.exe!Form1.Button1_Click<br>
どんな助けでもありがたいです。