私には2つの方法がありMethodAますMethodB。MethodBUIスレッドで実行する必要があります。私はそれらの間を実行することを許可せずに次々に実行する必要がありMethodCます。
MethodCユーザーが素敵な小さなボタンをクリックすると呼び出されます。
これを確実にするために私がしたことは、このLockようにコードの周りに置かれます:
 lock (MyLock)
 {
   MethodA(param1, param2);
   MyDelegate del = new MyDelegate(MethodB);
   if (this.IsHandleCreated) this.Invoke(del);
 }
そしてのためにMethodC:
public void MethodC()
 lock (MyLock)
 {
   Do bewildering stuff.....
 }
問題は私が立ち往生していることです。コードがデッドロックに陥っているようです。
スレッドを見ると、ボタンのクリックによって呼び出されたコードがスタックしlock (MyLock)てMethodCいて、他のスレッドがでスタックしているように見えthis.Invoke(del)ます。
内からメソッドを呼び出すのは危険だと読んだのLockですが、そこにコードを書いたのはThread.Sleep私なので、これは私を困らせているのはコードではないと思っただけでも起こるようです。
Invokedメソッドが機能しなくなるのはなぜですか?ロックが解除されるのを待ってmethodCから、元のロックに戻る可能性がありますか?