質問

私はアクセスを同期するために多くの場所で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のタイムアウトと0sによるサイクルが見ることができます:

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);
            }
        }
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top