問題タブ [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.
c# - Control.Invoke()およびControl.BeginInvoke()-過去のパラメーターはどこに保存されますか?どのように処分されますか?
Control.InvokeとControl.BeginInvokeについて多くのことを読み、InvokeはのようなものSendMessage()であり、BeginInvokeのようなものであることを理解していますが、渡されたパラメーターリストがどこに格納されPostMessage()ているのかわかりません。new object[] { arg, arg, arg, ...}従来の呼び出しでは、パラメーターがスタックにプッシュされ、呼び出された関数内でポップされ、終了後に呼び出しフレームがスタックから復元されます。ヒープオブジェクトへの参照を解放して、それらを収集できるようにすることを想定しています。では、プッシュされたスタックの日付はどこに保存されますかInvoke?BeginInvoke呼び出されたメソッドが終了すると、どのように破棄されますか?
また、パスパラメータを使用して新しいオブジェクト配列をロードせずに、制御メソッドを正常に呼び出すことができました。なぜこれが機能するのでしょうか?さらに良いことに、それは機能するので、なぜ私が今まで見たすべての例が新しいオブジェクト配列でそれを示しているのでしょうか?
これは私がいつも見て使用してきたものです:
しかし、これも機能します。
どんな情報やコメントも常に歓迎されます...
前もって感謝します。
c# - TCP Client to Fill a DataTable which populates a bound DataGridView, UI Unresponsive
First of all, I am using Visual Studio 10 and coding Windows Forms App. I am not experienced with threads in C#.
I have a C# app which uses my C# DLL that listens to a Network Stream, and parses the data it receives. The parsed data is used to insert/update the rows of the Datatable which is bound to the DataGridView that is located on the main form.
I have tried this first with a worker thread which is started inside the DLL. The DataTable which is bound to the DataGridView is passed as a parameter to the DLL. And then the thread starts. The thread function was something like this;
The ParseString() method parses the data and inserts a row to the DataTable or updates the existing ones.
This code was working well, until I tried to run the app with CTRL+F5 instead of F5. The UI became unresponsive after a few seconds later it began to fill the Grid.
I have googled this and found that I should use BeginInvoke to prevent the UI from freezing. But I was not successful to implement that.
I tried something like
instead of
but it worked the same way. Still doesnt work with "without debugging mode".
How should I implement this with BeginInvoke? Or should I try something else?
wpf - UIスレッドでコストのかかる操作を実行している間、UIを視覚的に更新し続ける
私のWPFアプリでは、UIスレッドで高価な操作を実行する必要があり(それを呼び出しましょうExpensiveUIOperation())、進行状況を追跡するためにUIを最新の状態に保ちたいと思います。
進行状況を追跡するために、プロパティが整数の依存関係プロパティにバインドされているTextBlock、があります。の間に、必要に応じての値を設定するだけです。TextPercentageCompleteExpensiveUIOperation()PercentageComplete
これで、スレッドについて十分に理解しました。UIスレッドを実行ExpensiveUIOperation()しただけでは、UIスレッドがブロックされ、インターフェイスの更新が停止するため、TextBlockが最新の状態に保たれていないように見えます。
そして、私は次のように非同期でそれを行うことができると思いました:
しかし、それはまだ機能していません。操作が完了するまで、テキストブロックは視覚的に更新されません。
これを行う方法はありますか?
残念ながら、この状況では、操作でUIスレッドが所有するオブジェクトを多用するため、バックグラウンドスレッドを使用できません。
c# - ユーザー インターフェイスの一部の項目の更新時間を測定 (および制御) するための最良の方法
私のアプリは、いくつかの操作の処理時間を表示する必要があります。処理時間の 1 つは、UI で処理時間を更新するのに費やされた時間です (わかりましたか? :D )。
操作の頻度は、0 から約 100 Hz (10 ms) まで変化します。
処理時間は一部のラベルに表示されます。値を設定するには、次の静的メソッドを使用します。
質問:
- 処理時間を更新しようとしてすべての UI をフリーズさせたくないので、更新のタイミングをどのように制御すればよいですか? 今、私は次のようなことをしています: 最後の更新時間が今から 100 ミリ秒前の場合にのみ更新します。
- BegingInvoke を使用すると、呼び出しが多すぎてキューがオーバーフローする可能性はありますか?
- BeginInvoke を使用してUI の更新時間を測定するにはどうすればよいですか? 最良の方法は、Invoke を使用することですか?
c# - Parallel BeginInvoke を使用しているときに Invoke が機能していない場合 - c# 4.0
以下に示すように AddListBoxItem 関数内で呼び出しを使用すると、ソフトウェアが応答しなくなり、フリーズしますが、BeginInvokeを使用すると機能します。なぜそれが起こっているのですか?
ビジュアル スタジオ 2010、C# 4.0
c# - BeginInvoke 呼び出し内で lock() を使用しても安全ですか?
カスタム オブジェクトを表示するためのコントロールを含むフォームがあります。フォームでは、オブジェクトがサーバーから受信したときにオブジェクトを ToAdd リストに追加するイベント AddObject をサブスクライブします。ToAdd リストから表示リストにオブジェクトをコピーするために 10 秒ごとに実行するようにタイマーをセットアップしました (一度に 1 つずつアイテムをコントロールに追加するよりも、項目をまとめてコントロールに追加する方が効率的でした)。コントロールをフォームに追加したら、ToAdd リストをクリアします。BeginInvoke 内にロックを入れても安全ですか? これを行うより良い方法はありますか?
c# - EndInvokeなしのC#ThreadPoolまたはBeginInvoke
ネット上では、ファイアアンドフォーゲットパターンの実装方法について非常に異なる意見があります。
ファイアアンドフォーゲットパターンを実装する必要がある場合は、EndInvokeを呼び出さずにBeginInvokeを呼び出すことは問題ではないと言う人もいます。
別のThreadPoolオブジェクトを作成する方が良いと言う人もいます。私の懸念は、ThreadPoolの初期化コストについてです。具体的には、呼び出すメソッドは、オブジェクトをキューに追加してから戻るだけです。
このため、プールにスレッドを作成する方が「高速」ですか、それとも単にメソッドを同期的に呼び出す方が「高速」ですか?プールにスレッドを作成するよりも費用がかかる作業の大まかなしきい値を知りたいです。
これに関するドキュメントはありますか?また、プールでの例外キャッチやその他の制限についてはどうですか?
c# - Action.BeginInvokeを使用したASP.Net非同期ページ
別のスレッドで関数を実行する非同期ページをasp.netに書き込もうとしています。次のコードの問題は、デバッグすると、関数EndAsyncOperationが呼び出されないことです。その結果、ページが完全に読み込まれず、永久に読み込まれます。アクションを使用して、スレッドプールとは別のスレッドでコードを実行します。動作する別のスレッドでコードを実行する別の方法はありますか?
どこが間違っているのですか?
そして別の質問。ASP .Netでは、ページがスレッドプールで実行されていることを読みました。では、サイトをデバッグして数ページを一緒にロードしようとすると、同期して次々にロードされるのでしょうか。
c# - すべてのControl.BeginInvokeがいつ完了したかを把握することは可能ですか?
現在のプロジェクトでは、コマンドプロンプトを使用して、textBoxに入力された入力に基づいて、リッチテキストボックスに表示し、ボタンを押しています。
コマンドプロンプト出力をwinformにリダイレクトする際のProcessクラスの問題を参照してください。
私が行いたい小さな更新の1つ(特に小さな更新コードではないかもしれません-wize)は、コマンドプロンプトが実行している間、ボタンを「無効」状態にすることです。プロジェクトは「Control.BeginInvoke」を使用してrichTextBoxのテキストを更新するため、「ファイアアンドフォーゲット」を実行します。これは、すべての「BeginInvokes」がUIに対して処理された後、無効にされたボタンを再度有効にする方法が実際にはないことを意味します。
問題は、すべての「BeginInvokes」が実行されたらコールバックを取得して、「これで完了です。ボタンを元に戻します」と言うことは可能かと思います。これにより、ユーザーがボタンを押して重複プロセスを送信するのを防ぐことができます。
これが私が使用しているコードのスニペットです:
c# - デリゲート/BeginInvokeを使用してC#で呼び出し先から呼び出し元を切り離す
C# には、長時間かかる可能性のあるアクションを実行するクラスの階層があります。このため、分離/コールバック メカニズムを実装して、呼び出し元がブロックされないようにしましたが、コールバック インターフェイスを介してアクションの完了が通知されます。これは次のようになります。
これは非常に多くのコードであり、メソッドごとに小さな違い (シグネチャ) が繰り返されています。私の質問は、これがこれにアプローチする正しい方法であるかどうか、または .NET/C# はこれをより簡単に/より冗長にする構造を提供しますか?