1

私は次のコードを持っています:

class Program
    {
        static AutoResetEvent objAuto = new AutoResetEvent(false);
        static void Main(string[] args)
        {
            ThreadPool.QueueUserWorkItem(new WaitCallback(SetState));
            Console.ReadLine();
            objAuto.Set();
        }
        static void SetState(object rsevent)
        {
            Console.WriteLine("Starting....");
            bool result = objAuto.WaitOne(10000); // 10 seconds
            Console.WriteLine("Finishing..." + result);
        }
    }

このコードを実行してEnter 10 秒以内にヒットするtrueと、result変数の値がそれ以外の場合に取得されますfalse

このブール値は各シナリオで何を示していますか...次のような引数WaitOneを持つ別のオーバーロードの意味/使用法も知る必要があります...boolean

objAuto.WaitOne(10000,false)

2 番目のパラメーターは、この出口は何ですかexitContext?context

4

2 に答える 2

1

true を返す場合はイベントが発生しました。false を返す場合は、イベントが発生したためではなく、タイムアウトに達したためにメソッドが終了しました。これは、そのメソッドのドキュメントに記載されています。

于 2013-01-21T16:35:41.147 に答える
1

戻り値は、指定したタイムアウト内にイベントが通知されたかどうかを示します。戻り値が true の場合、イベントは通知されました。false の場合はタイムアウトです。

のブール引数はexitContext、このメソッドを呼び出す同期コンテキストを解放するかどうかを示します。詳細については、MSDNを参照してください。

メソッドが既定以外のマネージド コンテキスト内から呼び出されexitContextない限り、パラメーターは効果がありません。WaitOneこれは、スレッドが から派生したクラスのインスタンスへの呼び出し内にある場合に発生する可能性がありますContextBoundObject。から派生していないクラス ( など) で現在メソッドを実行している場合でも、ContextBoundObjectが現在のアプリケーション ドメインのスタック上にあるString場合は、既定以外のコンテキストになる可能性があります。ContextBoundObject

コードが既定以外のコンテキストで実行されている場合に true を指定すると、スレッドはメソッドexitContextを実行する前に既定以外のマネージド コンテキストを終了します (つまり、既定のコンテキストに遷移します) 。WaitOneメソッドの呼び出しが完了すると、スレッドは元のデフォルト以外のコンテキストに戻りますWaitOne

于 2013-01-21T16:36:33.547 に答える