問題タブ [message-loop]
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.
.net - モーダル ダイアログの WPF フォームと Windows メッセージング
テキストボックスとボタンを備えた単純な WPF フォームがあり、フォーカスを失うと、単にメッセージボックスが表示されます。私のコードは次のようになります
テキストボックスにフォーカスがあり、ボタンをクリックすると、メッセージボックスが表示されている場合はボタンクリックは発生しませんが、メッセージボックスを表示する前に Application.DoEvents() を呼び出すと、ボタンクリックが発生します。
私の実際のアプリケーションはもう少し複雑ですが、単純なテキスト ボックスとボタンを使用してこの動作をシミュレートしようとしました。実際のアプリケーションでは、ディスパッチャーに投稿されたバックグラウンド ワーカー スレッドの 1 つがモーダル メッセージ ボックス (または WPF フォーム) を表示し、キュー内の UI 保留中のメッセージはすべてメッセージ ボックスによって処理されるようです (私は疑っています)。たとえば、キャンバス コントロールをクリックすると理想的には、「Mouse Down」と「Mouse Up」を取得しますが、モーダルメッセージボックスがこの 2 つのメッセージの間にある場合、「Mouse Down」と「Mouse Up」のメッセージのみが表示されます。
注:非モーダル ダイアログの場合、この動作が見られないことはわかりません。
また、モーダル ダイアログと非モーダル ダイアログの場合に、Windows フォームが Windows メッセージ ポンプをどのように処理するかについての素敵な記事を誰かが私に指摘してくれれば、私の知る限りでも役に立ちます。
c++ - ダイアログ ウィンドウの MFC メッセージ ループ
MFC ダイアログ アプリケーションを作成しました。
メッセージループを使いたいのですが、見つかりません。mfc が作成してくれますが、非表示になると読みました。どうすればメッセージループを操作できますか?
そのアプリケーション用に作成したトレイ アイコンからイベントを受信するには、メッセージ ループが必要です。
私はそのようなものを使用できるように:
私はまだmfcの初心者です。
c# - Application.DoEvents() と一部のマシンでのフリーズ
Application.DoEvents() を呼び出す winforms アプリケーションがあります。現在、このメソッドが呼び出される頃にアプリがフリーズします (驚くことではありません)。
ただし、これは一部のマシンでのみ発生します。これはマシン自体が原因であると言うのは公平ですか、それともコード/application.doevents() にまだかかっているのでしょうか? その場合、backgroundworker を使用するようにリファクタリングする必要があります。
これはマシン/環境の問題ですか、それともバックグラウンドワーカーを使用する機会ですか?
winforms - 1 つの WinForms ウィンドウで複数のプラグインのような XNA ゲームを実行する方法
複数のパネルで構成される (WinForms) アプリケーションを作成したいと考えています。パネルごとに、.dll ファイルを割り当てられるようにしたいと考えています。
これらの .dll ファイルには、それぞれのパネルにレンダリングする XNA ゲームが含まれている必要があります。
これらのゲームをロードできます
game.Run()
2 番目のメッセージ ループが開始されるため、使用できません。
InvalidOperationException
別のスレッドからのコントロールへのアクセスに関する s のため、新しいスレッドの開始も失敗します。
Web で見つけたチュートリアルでは、自分で作成したゲームをメイン アプリケーションに含めることしかできませんでしたが、プラグインのように、他のゲームを追加できるようにしたいと考えています。
WinForms アプリケーションでこれらの XNA ゲームをレンダリングするにはどうすればよいですか? または、これに対するより良い解決策はありますか?
winforms - WM_MOUSEMOVE を送信/投稿したのは誰ですか?
Win32 API メッセージ ループ (または などのより高いレベルの抽象化System.Windows.Forms.IMessageFilter
) を使用してメッセージを取得する場合、誰が/どのコントロールを/どのコンポーネントを/どのコードが投稿したかを調べるにはどうすればよいWM_MOUSEMOVE
ですか?
それは Win32 のコンテキストでも意味がありますか? object sender
.NET イベントに似たもの。
ドキュメントを確認しましたが、WM_MOUSEMOVE
何も見つかりません。それ以来、私は Win32 API を広範囲に使用していませんでした。
c# - メッセージ ループがアプリケーションをブロックしています
Web ブラウザー コントロールでダウンロード ポップアップを閉じる必要があります (ユーザーがファイルをダウンロードできないようにします)。どうすればこれを達成できますか?
私はこれを見つけました: How to block downloads in .NET WebBrowser control?
そして、私は2番目の答えを使用しました。動作していますが、問題があります。作成されたオブジェクトの GetText を呼び出すと、スレッド全体がブロックされているようです。私はそれに対する解決策を持っていません。
//編集
わかりました、提案してくれた@sgorozcoに感謝します。今私は SetWindowsHookEx と WH_CBT を使用しています。次に、メッセージ ループで HCBT_CREATEWND イベントをキャッチしています。しかし、lparm から CBT_CREATEWND を取得する際に問題があります。「マネージ デバッグ アシスタント 'FatalExecutionEngineError'」例外が発生します。
これが私の現在のコードです:
//編集2
ここに私の定義があります:
私の myCallbackDelegate は静的フィールドであるため、確実に収集される GC ではありません。一時的に、500ms ごとにすべてのウィンドウを列挙し、「ファイルのダウンロード」というテキストを含むダイアログを探します。しかし、それは醜い解決策です。
c++ - 低レベルのキーボード フックが断続的に呼び出され、GetMessage が返されない
メッセージ ループも実行するワーカー スレッドに、低レベルのキーボード フックを設定しました。キー ストロークの約 1/3 がフック関数をトリガーし、メッセージ ループで GetMessage 関数を解放するものはありません。後者に関連するものがあるため、メッセージもキューに入れられません (Windows のメッセージ ループを使い始めたばかりです)。一部のキーストロークだけでフックがトリガーされる原因は何ですか? GetMessage を正しく動作させるために欠けている設定/関数呼び出しはありますか (これによれば、何も欠けていません)。
これは私のフック設定とメッセージループです:
そして私のフック関数: