問題タブ [waithandle]
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# - new WaitHandle [] はどのように null を返すことができますか? それともそうですか?
プロジェクトでFluorineFx 1.0.0.17を使用しNetConnectionており、RTMP ホスト (Flash Media Server) に接続するために使用しています。PRTG 用の RTMP 監視プローブを作成しています。
ファイルの 173 行目のメイン アプリケーション プロセスの最後に常にエラーがありWorkItemsQueue.csます (ここに示す 2 番目のコード行)。
これはデバッガーが私に示すものです:

コール スタック:
プロセスの最後とは、プログラム全体が正常に動作することを意味しますが、メイン メソッド デバッガーの最後にこのアンマネージ コード エラーがスローされます (アンマネージ コードのデバッグを有効にするが有効な場合にのみ表示されます)。

これをデバッグする方法も、回避する方法もわかりません。どんな助けでも大歓迎です。
更新 1:

メイン スレッドは次の場所で停止します。
android - Androidゲームでメソッドまたはwait()/notify()を作成する
そこで、私が一般的にやろうとしていることを説明します。
- 顧客がいます(天候、イベント、または場所によって利用可能な顧客の数は時々異なります)
- 私はドリンクスタンドを持っています (特定の要因によって提供時間は異なり、ピッチャーを補充する時間が追加されます)
- スタンドに来る客の数は、価格、イベント、および人気によって異なります。
- 顧客が立って、別の顧客がまだサービスを受けている場合は、他の顧客が後ろに並んで待ちます。(長い間並んだ後、彼らは待ち時間について不平を言います)
- デイタイマーが欲しいので、スタンドが顧客へのサービスを終了していなくても、待ち時間のために顧客を失います.
そのため、Wait()/Notify() の方法を使用するのが最適かどうかはわかりません。顧客をクラスとしてセットアップし、それをアクティビティに持ち込むと、スタンド情報で販売日を実行できるのではないかと考えていました。これを行う方法を見つける手助けをいただければ幸いです。失敗せずにこれを行う方法を理解できるかどうかを確認するために、他のチュートリアルをまだ行っています。
c# - HttpWebRequest.BeginGetResponse を使用したタイムアウトへの最善のアプローチ
HttpWebRequest.BeginGetResponse は、HttpWebRequest の Timeout プロパティ (Timeout または ReadWriteTimeout) を考慮しません。
同じ結果を得るためにいくつかのアプローチを読みましたが、それが最善の方法であるかどうか、いくつかの呼び出しに使用する必要があるかどうか、またはループ内でスケーリングできるかどうかはわかりません(私はwebcrawlerを実行しています)。
重要なことは、最初は私のコードは非同期ではないということです。私のメソッドは CancellationToken を受け入れる必要があるため、非同期が必要なだけです。
私の懸念は、WaitHandles と ThreadPool.RegisterWaitForSingleObject についてです。これは日常的なコードではないので、近い将来に問題が発生する可能性があるかどうかはわかりません。
呼び出し中 (繰り返しますが、非同期ではありません)
c# - シリアル化できないオブジェクトのセッションのようなストレージ オプションはありますか?
背景(必要に応じてこの部分をスキップしてください)
必要に応じて、この部分を飛ばしてもかまいません。これは、問題をよりよく理解したい人のための背景です。
サイトでの 1 つのアクションの開始時に、いくつかの非同期操作を開始します。操作が完了する前にアクションが返されます。これが私が欲しいものです。ただし、Viewこのアクションによってロードされる は、別のコントローラーで他のいくつかのアクションを呼び出します。これらのアクションの一部は、最初のページからの非同期呼び出しの結果に依存しているため、他のコントローラーからの非同期呼び出しが完了するまで待機できる必要があります。WaitHandles を格納するために使用することだけを考えましSessionたが、WaitHandles はシリアル化できないため、明らかにそれはできません。
短縮版:
WaitHandle別のコントローラーで確実に取得できるように、あるコントローラーのどこかに非同期オブジェクトを格納できる必要があります。これらWaitHandlesもユーザー固有である必要がありますが、その部分は処理できます。それを不可能にするオプションをリストしないでください。
vb.net - vb.netでwaitHandleを使用する方法
私はVS2010を使用しており、Windowsフォームアプリケーションに取り組んでいます。
そのため、(ユーザー入力に応じて)動的に作成されたスレッドがあります。これらのスレッドの処理にはしばらく時間がかかる場合があります(極端な場合は数日)。そのため、フォームにボタンを配置し、スレッドを「一時停止」または「一時停止」できるようにしたいのです。.suspendメソッドを調べたところ、置き換えられました(使用しようとしましたが、失敗することがあります。UIがクラッシュする原因になります)。そのため、これを行うための新しいメソッドは「waithandle」です。このドキュメントを読みましたが、使用方法がわかりません。
これは、各スレッドの基本構造です。
次に、別のボタンに一時停止コードを配置します。すばやく一時停止することはそれほど重要ではありません。ループの次の実行で一時停止しても問題ありません(各実行は非常に高速で、数百回実行されます)。ループの開始時にウェイトハンドルチェックを行う必要があると想定していますが、実際にはこれを実装する方法がわかりません。これは私のウェイトハンドルの薄暗いコードです:
すべてのスレッド(メインUIスレッドを除く)を一度に一時停止する必要があるため、待機ハンドルが1つだけ必要なことを意味すると思いますが、これについてはよくわかりません。
とにかく、誰かがdoループに入るコードと、一時停止ボタンに入るコードを教えてくれれば、他のすべてを処理できると思います。:)
どうもありがとう!
フレイザー
コメントから:
ありがとう!私はそれを動かしました。これが私の含意です:
(これはコードの先頭(「パブリッククラスフォーム1」のすぐ下)にあり、スレッドでは次のようになります。
最後に、スレッドを一時停止/一時停止解除するボタンで:
c# - 非同期/待機タスクとWaitHandle
10N個のアイテムがあるとします(httpプロトコルを介してそれらをフェッチする必要があります)。コードでは、N個のタスクがデータの取得を開始し、各タスクは10個のアイテムを順番に取得します。アイテムを入れますConcurrentQueue<Item>。その後、アイテムはスレッドセーフな方法で1つずつ処理されます。
でマークされたステートメントに条件を配置できるかどうかはわかりません***。Task.IsCompletedタスクで使用しているため、ここではプロパティを使用できませんawait。タスクはすぐに完了します。そして、bool[]タスクが最後まで実行されるかどうかを示すaは、ManualResetEventでも同じ作業を実行できると思うので、本当に見苦しいように見えます。誰かが私に提案を与えることができますか?
c# - スレッドがC#で実行を終了するのを待つ方法は?
データベース接続が開いている関数が立て続けに呼び出されます。私の問題は、1 つのデータベース接続が閉じられる前に、関数の別のインスタンスが呼び出され、データベースでデッドロックが発生する可能性があることです。
私が試してみました:
しかし、スレッド エラーが発生し、プログラムがフリーズします。これは、私が信じているパラメーターを持たないスレッド開始関数と関係があります。
助けてくれてありがとう
c# - C# ASMX Web サービスの呼び出し
仕事の一部として利用する必要がある ASMX Web サービスがあります。ASPX ページ経由でこのサービスを呼び出して、サード パーティ システムで新しいエンティティを作成しています。そのサービスの基盤となるコードにはアクセスできません。単に別のシステムと通信できるようにするためです。
サービスを正しく呼び出しているかどうかを判断するのに苦労しています。誰かアドバイスをいただけないでしょうか。
ASMX ページをインストールしました。これにより、BeginProcessOperations メソッドと呼ばれるクラス「ConfirmConnector」が提供されました。それが戻ってくるのを待ってから、結果を解析したいと思います。結果は XML である必要があり、それをステップスルーして目的のデータを取得します。
問題は、このプロセスが時々死んでしまうことです。つまり、「EndProcessOperations」メソッドを呼び出しても何も起こりません。エラーは発生しません。コードが終了し、メソッドが返されます。
私の呼び出しコードは次のとおりです。
私のハンドラーコードは次のとおりです。
このコードを正しい方法で処理しているかどうか誰でもアドバイスできますか?また、ハンドラーのこの行の後に私のコードがランダムに爆撃する理由を誰か知っていますか?
助けてくれてありがとう、ポール
c# - waithandle で処理する前にユーザーがデータ入力を完了するのを待つ方法
ユーザーがデータを入力できるようにするUIがあり、ユーザーがデータを入力するたびに、この場所でデータが変更されたことを示すイベントを発生させ、キューに入れます。waithandleとwaitanyでイベントをリッスンするバックグラウンド スレッドがあります。. データが変更されるたびに、キュー内のすべてのアイテムに対してアクションを強制します。それは正常に動作します。問題は、ユーザーが 2 つの値を入力すると、2 つの変更イベントが発生することです。キューに 2 つの要素がありますが、最初のイベントが最初に取得され、すぐにアクションが強制され、その時点でキューには 1 つのアイテムしかありませんでした。次のイベントが来ると、キューから次のアイテムを処理します。人間のデータ入力の遅さ、イベント処理の速さのために、99% の時間、プロセスはキューから 1 つのイベントを処理します。方法があるかどうか疑問に思っているのですが、処理イベントの周りにロジックを配置して、少し待ってから処理できますか?
待機ハンドル部分
プロセスイベントで
c# - WaitHandle が閉じられるべきではないときに閉じられる
ほとんどの場合、このコードは機能するので、競合状態を考えています。結果クラスは不変ですが、そのクラスに問題があるとは思いません。
編集: 申し訳ありませんが、GetResult() メソッドを呼び出す直前に this.worker.RunWork() を呼び出していませんでした。Completed イベントが 2 回発生したにもかかわらず、waitHandle.Set()の前に waitHandle が閉じられた理由はわかりませんが、これにより (時々) 同じジョブが 2 回実行されたようです。これは IO 作業をまったく損なうものではありません (結果は正しかったです。コードを変更して手動でwaitHandleを閉じた後)。
したがって、質問が完全ではなかったとしても、 Iridiumの回答は(正しい回答ではないにしても)最も近い回答になるはずです。