問題タブ [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.
multithreading - モノがハングし、MS.Netがハングしないスレッドの問題
Linuxポートを想定してアプリをmonoでテストしていますが、スレッドに問題があります。最初はここに3000コード行を貼り付けることを検討しましたが、最後に小さな最小限の例を考案しました;)
ボタン付きのフォームがあります(詩的に名前が付けられButton1
、ラベル(当然のことながら名前が付けられていますLabel1
))。たくさんの人がと呼ばれる形で幸せな生活を送っていForm1
ます。クリックするButton1
と、ローカルカウンターをインクリメントし、その値を反映するようにLabel1
(を使用して)更新する無限ループが起動します。Invoke
現在Monoでは、フォームのサイズを変更すると、ラベルの更新が停止し、再起動することはありません。これは、MSの実装では発生しません。BeginInvoke
これ以上うまくいきません。さらに悪いことに、どちらの場合もUIがハングします。
この不一致がどこから来ているのか知っていますか?どのようにそれを解決しますか?そして最後に、BeginInvokeがここで機能しないのはなぜですか?私は大きな間違いを犯しているに違いありません...しかし、どれですか?
編集:これまでのいくつかの進歩:
- BeginInvokeを呼び出すことは、実際には機能します。ただ、UIが十分に速く更新されないため、停止しているように見えます。
- モノラルでは、UIキューにメッセージを挿入すると(フォームのサイズを変更するなどして)、スレッド全体がハングします。実際、同期
Invoke
呼び出しは決して戻りません。私はその理由を理解しようとしています。 - 興味深いことに、を使用しても
BeginInvoke
、サイズ変更操作が終了する前に非同期呼び出しは実行されません。MS.Netでは、サイズ変更中も実行を続けます。
コードは次のようになります(C#バージョンより低い):
または、C#では、
c# - なぜAsyncCallback?
AsyncCallback
デリゲート呼び出しが完了した後、関数がすべての後処理タスクを実行することを読みました。私の質問は、デリゲート呼び出しが戻るまで待機するようEndInvoke
に、後処理タスクを after/below に書くことの違いは何ですか。EndInvoke
wpf - Dispatcher.BeginInvoke() の動作に混乱
誰かが私が抱えている問題に光を当てることができますか?
私はwpfプロジェクトに取り組んでいます。シナリオは次のとおりです。
メイン UI スレッドでウィンドウ (モデル ウィンドウ) をポップアップしてから閉じる必要があります。これらの作業は別の UI スレッドから開始され (ユーザーがメインの UI ウィンドウをクリックするのを防ぐため)、このウィンドウを閉じます。主なコードを以下に示します。そして、それは機能します。
私が知る限り、閉じるメソッドがShowDialog()
返される前に実行されることはありません (少なくともこれは UI スレッドの場合であり、ディスパッチャのないコードを意味します)、マルチスレッドの経験がある人はいますか?
お時間をいただきありがとうございます!
c# - アクションで BeginInvoke を単体テストする方法
Action メソッドで BeginInvoke をテストする方法を探しています。メソッドはバックグラウンド スレッドで実行されるため、実際に完了したりコールバック メソッドを呼び出したりするタイミングを知る方法はありません。アサーションを行う前にコールバックが呼び出されるまでテストを待機させる方法を探しています。
次の Presenter クラスでは、データがフェッチされたときにビューを更新するバックグラウンド スレッドで PopulateView を呼び出しており、ビューのプロパティが正しく初期化されていることをアサートしようとしていることがわかります。
NUnit と Moq を使用しています。
c# - Backgroundworker/Control.BeginInvoke() フリーズ UI
Windows svc (別のプロセス) を実行し、同時に UI を更新するコードがあります。呼び出しはBeginInvoke
、次のように使用します。
これはDoWork
イベント ハンドラにあります。ただし、UI はまだフリーズします。どこかに電話する必要がありますApplication.DoEvents
か (必要な場合、どこに?)? 凍結を解消するにはどうすればよいですか?
ボタンクリックで、私は持っています:
InstallBackgroundWorker
UIなどを更新するコードを実行するだけです。
私がやろうとしているのは、WCF サーバー (Windows サービスでホストされている - これは問題ありません) を呼び出すことですが、それが機能していない間に、プログレス バーとラベルを任意の値で非同期に更新します。ツリー ノードを選択すると、選択したツリー ノードのイベント ハンドラーが起動され、速度が低下する場合があります。これを独自のバックグラウンドワーカーに入れてみます。
c# - C# - InvokeRequired パターンから同期 UI 更新を取得するには?
リッチ テキスト ボックスにテキストを追加するスレッドがいくつかあります。Invoke() を使用すると、メインの UI スレッドとワーカー スレッドの間で非常に簡単にデッドロックが発生します。BeginInvoke() を使用すると、望ましくない非同期 UI 更新が発生します。私が判断できない後の段階ではなく、テキストがテキストボックスに即座に表示されるようにします。
タスクを実行するにはどうすればよいですか?
ありがとう!
c# - C#の「BeginInvoke」デリゲート関数で変数の値を設定するにはどうすればよいですか?
私は別のスレッドにこのコードを持っています:
私が欲しいのは、「」の値を取得し、LISTVIEW.Items[x].Text.Trim();
それを「sub」に渡すことです。LISTVIEWコントロールはメインスレッドにあることに注意してください。どうすればこれを達成できますか?
winforms - C# Winforms: BeginInvoke はまだ同じスレッドで実行されていますか?
私は Web 開発者で、マルチスレッド プログラミングに取り組もうとしています。あるフォームでは、非同期デリゲートを使用して、2 番目のスレッドで値を計算するメソッドを実行しようとしています。また、UI スレッドの実際の進行状況を示すプログレス バーが通知されることも必要です。
これを実行すると、UIスレッドでまだ実行されていることを除いて、すべてが問題なく計算されます(フォームのボタンをクリックするとフリーズするためだと思います)。
なんで?同じコードでビルド可能なサンプル プロジェクト (VS2010) も添付します: http://osmera.com/windowsformsapplication1.zip
初心者を助けてくれてありがとう。
wpf - Dispatcher.BeginInvoke はアイテムをどこに置きますか? プッシュフレームごとに新しいプッシュフレーム?
私は wpf で Dispatcher を使用しており、次のページを見ています: http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcher.pushframe.aspx
DoEvent メソッドと同様の結果を達成する例があります。最初に begininvoke を呼び出してイベント キューにアイテムを配置し、次に pushframe を呼び出します。気になるのは、どのフレームを装着したか?元のものですか、それとも新しくプッシュされたものですか?
誰かがこれに光を当てることができますか? ありがとうございました。