あなたが対処する必要がある多くの問題があります。
まず、Thread
クラスを使用しないでください。本当に。並列処理のためのフレームワークを作成していない限り、Thread
を使用している場合は、間違いがあります。 System.Threading.Tasks.Task
または(バージョン4.0以前の.NETの場合)System.Threading.ThreadPool
などを使用して、コードの非同期実行をスケジュールします。
第2に、スレッド間でdata
のようなインスタンス変数を共有することは固執することに注意してください。 を保存するデータをに渡す方が競合や競合の問題がないように非同期機能を使用する方がはるかに優れています。あなたは、これは実行の順序である場合に発生します何をすべきか
第三に、:
<things happen>
OnEvent fires
<things happen>
Serialize starts
OnEventFires
Serialize completes
Serialize
の真ん中にOnEvent
火災は、それはそれを完全に無視するべきか、それが別のシリアル化をスケジュールする必要がありますので、?ここで "b"と答えると、ここで何が起こるはずですか?
<things happen>
OnEvent fires
<things happen>
Serialize starts
OnEvent fires
<things happen>
OnEvent fires
Serialize completes
はSerialize
から呼び出しは、スケジュール、またはただ一つべきか?
"初期シリアル化プロセスが終了した後に、シリアル化が1回だけ実行されるようにします。" 最初のシリアル化(別名2回のみ)または正確に1回(すべてのコールが完了した後)に1回だけ追加することを意味しますか? –
条件変数を調べましたか?私はマルチスレッドの専門家ではありませんが、これはあなたが探しているものかもしれません。 – covertCoder