問題タブ [begininvoke]
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.
delegates - デリゲートを介してオーバーライド可能なメソッドを実行すると、Invoke()とBeginInvoke()の動作が異なります
このコードがなぜそのように動作するのか誰かに教えてもらえますか?コードに埋め込まれたコメントを参照してください...
私はここで本当に明白な何かを逃していますか?
c# - Invoke() と BeginInvoke() の違いは何ですか
BeginInvoke()
とInvoke()
areの違いは何ですか?
主にそれぞれ何に使うのか。
編集: スレッド オブジェクトの作成とその上での呼び出しBeginInvoke()
と、デリゲートでの呼び出しの違いは何ですか? それとも同じものですか?
winforms - System.Windows.Threading.Dispatcher と WinForms?
アプリケーションSystem.Windows.Threading.Dispatcher
の UI スレッドで動作しますか?WinForms
はいの場合、なぜですか? コンポーネントのように見える WindowsBase.dll から来ていWPF
ます。
そうでない場合、どうすれば作業ユニットを UI スレッドに戻すことができますか? を見つけましControl.BeginInvoke()
たが、元のスレッドを参照するためだけにコントロールを作成するのは不器用です。
timeout - タイムアウト後に EndInvoke を呼び出す必要がありますか?
Web ページで、タイムアウトをプログラムで設定することを許可していないサード パーティに電話しています。BeginInvoke を呼び出し、AsyncWaitHandle.WaitOne を使用して、指定された時間待機します。
呼び出しがタイムアウトした場合は、先に進み、開始したスレッド呼び出しを忘れます。私の質問は、タイムアウトの状況で何らかの方法で EndInvoke を呼び出す必要があるかどうかです。この MSDN ページの "CAUTION" 発言は、私がすべきかどうか疑問に思います: http://msdn.microsoft.com/en-us/library/2e08f6yc(VS.71).aspx
私がすべきだと思うなら、次の質問は、私の Web ページの処理が完了し、サード パーティが戻ってくる前にクライアントに戻る場合、コードを実行するためにコールバック メソッドがリッスンするかどうかです。リクエスト/レスポンスが完了すると、サーバーはアクティビティの検索を停止しませんか?
私が使用しているコードは次のとおりです。
wpf - Winforms から WPF への変換: BeginInvoke を何に?
WinForms からの私の古いコードは次のとおりです。
これを WPF フレンドリーに変換する簡単な方法はありますか? これまでのところ、私は持っています:
しかし、その 2 番目の「デリゲート」呼び出しは失敗します。このデリゲートを呼び出すにはどうすればよいですか? デリゲート メソッドの作成、デリゲート メソッドのインスタンスの作成、その特定のインスタンスの呼び出しなどをすべて実行できると思いますが、これらの匿名デリゲートの全体的なポイントは、その面倒を避けることだと思いました。さらに、私の古い winforms コードには最初の実装がいたるところにあるため、すべてのデリゲートの匿名化を回避したいと考えています。
編集:以前と同じように MethodInvoker を使用しようとすることはできますが、コンパイラが混乱します。MethodInvoker は System.Windows.Forms の一部であるため、そのアプローチを使用しても機能しません。次のように:
その MethodInvoker の使用はコーシャではありません。それの別の実装、または同じ動作を使用する他の方法はありますか?
c# - control.begininvoke を使用した後も UI が応答しない
C# winforms アプリケーションを作成しました。今、私はテキストボックスで出力を更新する膨大な数のクランチ関数を呼び出すボタンがたくさんあるフォームを持っています。テキストボックス内のテキストを更新する関数にデリゲートを渡す textbox.begininvoke() メソッドを呼び出しますが、テキストが巨大な場合、キャンセルボタンをクリックできないため、フォームは応答しません。フォーム全体の応答性を維持し、更新も継続する方法はありませんか。データが来るときにユーザーに表示する必要があります。すべてをバッファリングして最後に表示することはできません。また、独自のバッファを実装し、特定の間隔でデータを表示しようとしましたが、これは少量のテキストにはうまく機能しますが、大量のテキストでは UI が応答しません。助けはありますか?ありがとう
いくつかの混乱が生じているため、質問を更新します
- 別のスレッドで数値処理関数を呼び出しました。
- その数値計算関数は、データが到着してテキストボックスを更新するたびに control.begininvoke 関数を呼び出します
- MY UI が表示され、出力が表示されますが、データが膨大な場合、UI は表示されますが、他のアクティビティを実行できません。
c# - BeginInvoke のパラメーターとしての匿名メソッド?
匿名メソッドをパラメーターとしてメソッドに渡せないのはなぜBeginInvoke
ですか? 次のコードがあります。
デリゲートの宣言を避けようとしています。代わりに以下のようなものを書くことができないのはなぜですか? それとも、正しい構文を理解できないだけですか? 以下は現在、以下を生成します。
引数の型 '匿名メソッド' は、パラメーターの型 'System.Delegate' に割り当てることができません
もちろんその通りですが、これを行うために使用できる他の構文はありますBeginInvoke()
か?
(これを行うことができれば、明示的なデリゲートの代わりにアノン メソッド/ラムダを使用するという概念にうまく適合し、他の場所でもきれいに機能します。)
c# - 非同期プログラミングモデルで使用するのに適した命名ガイドラインは何でしょうか?
すべてのブロッキング操作を対応する非同期操作に変換するために、コードの一部でリファクタリングを行っています。私のコードはC#であり、UPnPクエリに続いてHTTPクエリを実行しています。このために、UdpClientとWebClientのAPMメソッド(BeginReceiveなど)を使用します。
私の単一のメソッドは、Call_1-> Callback_1->Call_2->Callback_2などの連続です。
Call_1を除くすべてが私のクラスインターフェイスの一部ではないことを知っている誰かが、その状況でメソッドに付けられるべき名前に関するいくつかのガイドラインを私に指摘できますか?Callback_1、Call_2などのメソッドは、実際にはワークフローの非同期化の単なる副作用です。どのような命名法を使用しますか?
CCRを使用すると、yieldキーワードを使用すると、すべてが1つのきれいなメソッドにとどまりますが、残念ながら、今のところCCRは使用しません。
.net - タイムアウトで呼び出す
ダイアログまたはその他のユーザーインタラクションをポップする必要があるバックグラウンドスレッドで実行されているコードがあるためInvoke
、UIスレッドへの通常の呼び出しを行います。
しかし、バグに遭遇しました。UIスレッドが呼び出しにすぐに応答しないことがありInvoke
ます。UIスレッドが現在、まだ返されていないクロスプロセスDCOM呼び出しを実行していたという事実まで追跡しました。DCOM呼び出しが返されると、関数が呼び出されますが、それまではInvoke
呼び出しがハングしたように見えました。
これに対する私の解決策は、タイムアウトを導入することでした:
これは「私のマシン感覚で動作する」で機能しましたが、いくつかの欠陥がありました。
(出典:codinghorror.com)
- まず、タイムアウトが発生した場合でも、関数は呼び出されます-DCOM呼び出しが実際に完全にハングしていなかった場合、最終的に実行されます
- 第二に、明らかな恐ろしい競合状態があります
- 最後に、全体の「Arrgh」性があります
最初の2つのことが解決できたとしても、私たちはまだ一般的な不快感を持っています。これを解決するためのより良い方法はありますか?