GUIとしてWPFを使用して、C#で簡単なLANチャットを作成しようとしています。私はサーバーレスのチャットを可能にしたいので、アプリケーションの各インスタンスがマルチキャストされたメッセージをIPでリッスンし、そのIPにマルチキャストを送信したいと思います。しかし、スレッドネットワーキングのためのさまざまなチュートリアルでは、ネット上では、独自のスレッドで設定されたWPFではなくコンソールを使用しています。私はこれらのチュートリアルを修正しようとしましたが、GUIスレッドのサスペンドやメッセージがGUIに処理/追加されていないなど、常に問題があります。コンシューマ/プロデューサのスレッドシステムに関するチュートリアルも素晴らしいでしょう。WPFフロントエンドを使用したスレッドネットワーキングのための.NETチュートリアル
答えて
あなたのシナリオとスレッド間通信のシナリオとの間には何も変わりませんが、あなたはWPFと他のスレッドの間で整理しているb/cを活用できる多くの自由な作業があります。
ショート・バージョン: ローカル・スタック内の別のクライアントからメッセージを受け取り、WPFに知らせる必要がある場合は、ネットワーキング・スレッドのDispatcher.Invokeを使用してWPFスレッドへの呼び出しをマーシャリングし、メッセージオブジェクトの。
まず、アプリの初期化中にバックグラウンドスレッドにWPFディスパッチャへの参照を保存します。あなたのWPFのスレッドがネットワークスレッドをスピンアップだものです(あなたが病理学的にマルチスレッド化されないと仮定した場合)ので、これは簡単です:
var guiDispatcher = Dispatcher.CurrentDispatcher;
あなたの他のスレッドがGUIディスパッチャにアクセスすることができたら、それは非同期にコードを実行することができますそのディスパッチャのコンテキスト(私たちの場合は、WPFのGUIスレッド)上:
Message msg = myNetworkComms.GetMessage(); // or whatever
Action updateGui =() => myViewModel.ApplyNewMessage(msg);
guiDispatcher.BeginInvoke(DispatcherPriority.Normal, updateGui); // Run updateGui on GUI thread
、は、なぜあなたはあなたのネットワークI/Oのために別のスレッドをスピンアップしていると述べているすべての?それは非常にリソースの無駄に見えます。あなたが利用できる非同期ネットワークI/Oメソッドがないと確信していますか?
これは最も簡単な例ではないかもしれませんが、それは私がGUIの回転を維持し、その後に入ってくるのコマンドのキューをチェックするDispatcherTimer Classを使用していmulitple AIのソケットhttps://github.com/bondehagen/CloudWars
によって接続されたとWPFのゲームです選手をコントロールする。このクラスは役に立つかもしれません。https://github.com/bondehagen/CloudWars/blob/master/Simulator/CloudWars.Gui/Helpers/WindowThread.cs
私はそれを調べます。 – T0xicCode
- 1. requests_oauth2を使用するためのチュートリアル
- 2. WPFリボン(.NET 4用)とRibbonControlSizeDefinitionを使用したリボンアイテムサイズのアイテムレベルコントロール
- 3. C#.NETのWPFアプリケーションがランダムにハングアップ、私は次のライブラリを使用してWPF .NETアプリケーション(.NET 4.5)を書いた
- 4. Monogame.Extendedを使用したチュートリアル
- 5. WPFを使用した.NET 4アプリケーションのモノポートのGUI
- 6. カスタムのユーザーコントロールを作成するためのWPFチュートリアル
- 7. CodedUIチュートリアルを作成するための良いWPFアプリケーション
- 8. ESのためのJedis「フロントエンド」
- 9. Unity Engineをフロントエンドとして使用したMVVMパターンの使用
- 10. OpenFOAMのSTLファイルでsnappyHexMeshを使用するためのチュートリアル
- 11. jQueryフロントエンドを使用したREST Webサービスセキュリティ
- 12. RailsのためのIndexTankチュートリアル
- 13. AndroidでHibernateを使用するためのチュートリアル?
- 14. impactJSでTriggerIOを使用するためのチュートリアル?
- 15. iPhoneアプリでSubversion C APIを使用するためのチュートリアル?
- 16. SAP JCo 3.xを使用するためのチュートリアル、マニュアル、ドキュメント
- 17. 可視カーソル(.NET 3.5)を使用したWPFの読み取り専用テキストボックス
- 18. JUnit 3を使用したJMockチュートリアル?
- 19. UITableを使用したUINavigationBarチュートリアル?
- 20. チュートリアル:SignalR 2を使用したサーバーブロードキャスト
- 21. SQLServerを使用したASP.NET MVCチュートリアル?
- 22. Spring Securityチュートリアルを使用したエラービルドプロジェクト
- 23. WPFアプリケーションをビルドするためのLinux上の.NET CIサーバー
- 24. laravelとvueを使用してフロントエンドを実装するためのベストプラクティス
- 25. WPFを使用したコースウェアプロジェクト
- 26. WPFを使用したクロスプラットフォームアプリケーション
- 27. wpfを使用したAutoIt
- 28. WoocommerceチェックアウトのためのフロントエンドJSのオーバーライド
- 29. フロントエンドの開発のためのインポート
- 30. クライアント側(フロントエンド)のデータバインディングのためのAurelia
私はそれが最も簡単だろうと考えました。しかし、非同期ネットワークI/Oを使用する方が簡単な場合は、それを調べます。 – T0xicCode
両方のテクニックを使用して実際のサンプルを実装すると、関連APIの非同期メソッドがはるかに簡単になると思います。 :) –