C#Windowsアプリケーションで2つのUIスレッドを実装するにはどうすればよいですか?C#windowsアプリケーションで2つのUIスレッドアプリケーション
答えて
スレッドを開始する前にスレッドをSTAに切り替えるには、Thread.SetApartmentState()を呼び出す必要があります。そして、そのスレッド上に作成されたウィンドウを生き残らせるためにメッセージループをポンピングしてください.Application.Run()。 Application.ExitThread()はメッセージループを終了し、スレッドを終了させます。実行(フォーム)を使用すると、メインスレッドと同様に自動的に実行されます。
しかし、ユーザーは、そのスレッドで作成したウィンドウを扱うのに苦労するかもしれません。メインスレッドのウィンドウとZオーダーの関係はなく、デスクトップはその親です。それはあなた自身のものを含め、別のウィンドウの後ろに簡単に迷子になる傾向があります。そのための厄介な回避策は、TopMostであり、SetParent()をピンポイントすることです。
これは答えではありませんが、それ以上の説明です。
同時に2つのスレッドが同じピクセルにアクセスすることが許可されている場合(マルチスレッドUIの結果である場合)、スレッド間で何らかの並べ替えが必要です。スレッドが同期しなかった場合、ピクセルの色をどのように決定する必要がありますか?
ロックを追加する必要があります。 1ピクセルあたりのロックは非常にコストがかかるので、すぐにコントロールごとまたはウィンドウごとのロックに移行します。そこに行く:私たちはロックを実装しているUIにアクセスするために1つだけのスレッドを許可します。
BTW:ピクセルをcontrolまたはcontroltreeに置き換えます。それが画素であろうとコントロールであろうと、共有されているデータに関するピクセルだけではありません。
新しいスレッドでApplication.Run(...)
を呼び出し、独自のメッセージループでフォームを開きます。
new Thread(() => Application.Run(someForm)).Start();
- 1. スレッドアプリケーションの問題
- 2. スレッドアプリケーションをC++からCLRに移動
- 3. ユニバーサルWindowsアプリケーション:ListViewItem内の2つのボタン
- 4. WindowsのUIテストモードでiOSアプリケーションを起動
- 5. C#WindowsアプリケーションLOC_Counter
- 6. クライアントサーバーC++ Windowsアプリケーション
- 7. Windows Mobile - 非UIアプリケーション用の自動テストツール
- 8. 2つのC#アプリケーション間の通信
- 9. 2つのC#アプリケーション間の接続
- 10. Cアプリケーションの2つの主な機能
- 11. UIの行をグループ化し、C#で2つのテーブルに挿入
- 12. Facebook C#SDK Windowsアプリケーション
- 13. 同じアプリケーションで2つのWindowsサービスを開始する
- 14. Windows CEアプリケーションでUIがちらつくのを避けるには?
- 15. WindowsフォームUIスレッドの問題C#
- 16. 2つの別々のシステムを接続するアイデア。 1つはWindowsアプリケーションで、もう1つはWebアプリケーションです
- 17. Windows(デスクトップ+ Webアプリケーション)およびWindowsのUI開発CE
- 18. C#Windowsアプリケーション - Webブラウザのドラッグアンドドロップ
- 19. Windows FormsアプリケーションのDrawigグラフィックC#
- 20. C++/CXのユニバーサルWindowsアプリケーション
- 21. xmlスキーマビューアのC#windowsアプリケーション
- 22. Windows用のC#コードエディタコントロールは、アプリケーション
- 23. C#Windowsアプリケーション用のキャッシュサーバー
- 24. C#2008のサンプルWindowsアプリケーション
- 25. C# - Windowsアプリケーション出力のキャプチャ
- 26. キャプチャのdiv - 私のC#のWindowsアプリケーションで#
- 27. 精密スレッドアプリケーションで部分和で
- 28. WaitForSingleObjectでのWindows C++アプリケーションのエラー
- 29. SqlDependencyは、C#のWindowsではアプリケーションのプロパティ
- 30. C#Windowsアプリケーションでのカスタムカラーカーソルの使用
@Joey:WinForms/WPFコントロールはスレッドアフィニティを持っていますが、コントロールを共有しない限り、実際には複数のUIスレッドを持つことができます。 –
@ジョイ:それはおそらく彼がなぜそれについての情報がほとんどないのでここで尋ねているのか一般的ではありません。 WPFでは、アプリケーションがシングルトンであることが強制され、メインスレッドとの親和性があるという事実のために、私はそれが可能であるとは考えていません。 – Josh