問題タブ [autoresetevent]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - AutoResetEvent メソッドが正しい順序で呼び出されるようにするにはどうすればよいですか?
タイマーを実行する必要があるコードがいくつかあります。Timer は条件をチェックし、その結果に基づいて、続行できることを呼び出し元に通知します。ここに私の疑似コードがあります:
私の懸念は、タイマーをインスタンス化する方法に関係しています。dueTime を 0 にして開始すると、コメントにはタイマーがすぐに開始されると書かれています。呼び出し元のスレッドがタイマーによってプリエンプトされ、呼び出し元のthis._reset.Set()
スレッドが を呼び出す前に呼び出しが発生した場合はどうなりますthis._reset.WaitOne()
か? これは私が心配しなければならないことですか?これまでのテストでは、コードは期待どおりに機能します。
が true にRun()
なるまで関数をブロックしたいので、この方法でコードを設定したことに注意してください。ただし、1秒ごとにチェックするだけです。condition()
condition()
c# - 別のスレッドから UI を更新しようとすると、アプリケーションが応答しません
実行フロー:
- メインスレッドから、長時間実行されるプロセスを実行している新しいスレッド (並列スレッド) を呼び出しました。
- 並列スレッドがメイン スレッド UI を更新しています。
- 並列スレッドが完了するまでメインスレッドを待機させました。
- 2 つのスレッド間の同期が必要です。
- メインスレッドで並列スレッドの結果を使用する必要があるため、並列プロセスが完了するまでメインスレッドをブロックしました。
これが問題のある私のコードです。問題を解決するための提案をしてください。
c# - AutoResetEvent が機能しない
私のコードは次のとおりです。
そして後で:
私の問題は次のとおりです。
1 つのメソッドに「wait_till_finish.WaitOne()」があり、Qar_Function メソッドを呼び出した後、待機状態になっているため、最初にメソッドを呼び出し、次にメソッドが実行されて終了するまで待機し、次に、qar_function メソッド内で AutoReset を設定します。
機能していません。
デバッガーを使用していますが、WaitOne で待機していません。次の行に移動し続けるだけです。
私は何を間違っていますか?どうも。
c# - WinForms で AutoResetEvent を使用する方法
最近Threads
、アプリケーション内でAutoResetEvent
. コンソール アプリでは、ループを作成し、スレッドがデータを処理する準備ができていることを示す信号を待機することにwhile(true)
依存します。ワーカー スレッド用のメソッドと、ワーカー スレッドとメイン スレッド間で共有するデータ要素を持つを使用して、スレッド間でデータを共有する方法を知っています。AutoResetEvent.WaitOne()
AutoResetEvent.Set()
Class
私の質問はAutoResetEvent
、通常はコマンド ループが表示されない Winforms アプリで使用する方法です。WaitOne()
Winforms アプリのどこに呼び出しを配置すればよいですか?
サンプル コードについて: 最良の例は、タイムアウトを使用して を作成する方法に関するこのサイトの回答Console.ReadLine()
です。これは基本的に の使用方法の簡単な例signals
です。その例は、コンソール アプリの例です。
グーグルで検索すると、私の質問に対する答えはBackgroundWorker
コントロールを使用している可能性がありますか?
c# - C# での中断イベント処理
私は2つのクラスを持っています:
また、コードには別の場所があります
- では、がまだ動作しているときに が
ItemFinished
発生した場合ProcessData()
、どうなるでしょうか? - クラスの終了時にクラスを待機さ
AutoResetEvent
せるようなものを使用する必要がありますか?A
B
ProcessData
lock
で使用する必要がありますProcessData
か?- でクラスのスレッドを呼び出し
B
てもm_thrd = new Thread(this.ProcessData);
よろしいですか? ここで私を混乱させています-イベントが発生ProcessData
する前に終了しません(最初に生成されたときにスレッドがすでに終了してItemStarted
いるという状況につながりませんか)?B
ItemStarted
c# - AutoResetEvents は、イベント ハンドラーの待機中にメイン スレッドをロックします
簡単な説明は、私が制御できないサードパーティの DLL でいくつかの接続イベントを開始しようとしているということです。接続が発生すると、イベントが発生します。
これが発生するまでメインスレッドで待機する必要がありますが、これを設定するたびにメインスレッドがロックされます。
呼び出しコード
=-------------------
=---------------------------------
このコードの問題は、実行時に StartInstrumentMonitoring がサード パーティの DLL に対して必要な呼び出しを行い、イベント ハンドラーをアタッチしてライブラリと対話した後に戻ることです。これは明らかに WaitOne() を呼び出します。これは、私が使用しているメイン スレッドをブロックし、instrument_ConnectionEvent
c# - AutoResetEvent.Set() は何をしますか?
私がこれを行う場合:
そして、メインスレッドで私は:
状態をfalse
からtrue
?に変更します。
もしそうなら、それは基本的に行います:
?
c# - プロンプトに対して OutputDataReceived が発生せず、AutoResetEvent が通知されないのはなぜですか?
コマンドライン インタープリターを持つプロセスを生成するアプリを作成しています。別のマシンからこの CLI にコマンドを提供する必要があります。ここで、コマンドがいつ終了したかを検出する必要があるため、作成中のプロセスの標準出力に CLI のプロンプトがいつ表示されるかを確認しています。コードのスニペットを次に示します。
現在、コードは WaitOne() の呼び出しでハングしています。OutputDataReceived
理由について混乱しています-出力でCLIプロンプトを検出せず、イベントでプロンプトが受信されたこと、または受信したデータがnullであることを通知するWriteLinesを取得しません。つまりOutputDataReceived
、前のコマンドが完了してプロンプトが表示されたときにイベントが発生していません。
私が提供している入力コマンドはしばらく時間がかかりますが、完了します。ここで AutoResetEvent を間違って使用していますか?