EventWaitHandleが待っているかどうかを検出するには?
-
19-09-2019 - |
質問
私はアクセスを同期するために多くの場所でEventWaitHandleを採用してかなりよく、マルチスレッドのWinFormsアプリを持っています。
私はこのようなコードを持っているのでます:
List<int> _revTypes;
EventWaitHandle _ewh = new EventWaitHandle(false, EventResetMode.ManualReset);
void StartBackgroundTask() {
_ewh.Reset();
Thread t = new Thread(new ThreadStart(LoadStuff));
t.Start();
}
void LoadStuff() {
_revTypes = WebServiceCall.GetRevTypes()
// ...bunch of other calls fetching data from all over the place
// using the same pattern
_ewh.Set();
}
List<int> RevTypes {
get {
_ewh.WaitOne();
return _revTypes;
}
}
その後、私はちょうどUIから.RevTypes
のsomewehreを呼び出し、LoadStuff
が実行を終了したとき、それは私にデータを返します。
すべてこれは完全に正常に動作するが、しかしRevTypes
はただ一つの特性である - これらの数十が実際にあります。そして、これらの特性のうちの1つまたは複数のは、高速な方法で読み込みからUIを保持しています。
各プロパティにベンチマークコードを配置するショート、ローディングからUIを保持しているプロパティを参照する方法はありますか? EventWaitHandleが実際に待つことを余儀なくされているかどうかを確認する方法はありますか?
解決
私は何をわからないとどのように達成したいのですが、彼らは、現在のように、設定されている場合は、WaitHandle
のタイムアウトと0
sによるサイクルが見ることができます:
class Program
{
static void Main(string[] args)
{
EventWaitHandle[] waitHandles = new EventWaitHandle[3];
for (int i = 0; i < 3; i++)
{
waitHandles[i] = new EventWaitHandle(false, EventResetMode.ManualReset);
}
waitHandles[1].Set();
for (int i = 0; i < 3; i++)
{
if (waitHandles[i].WaitOne(0))
{
Console.WriteLine("Handle {0} is set", i);
}
else
{
Console.WriteLine("Handle {0} is not set", i);
}
}
}
}
所属していません StackOverflow