私は自分の小さなネットワークライブラリを作成してネットワーキングを学ぼうとしています。現在、このようなコードで使用できる新しいクライアントのリストがあります。 NewClientConnected()メソッドは、リストに何かがある場合にtrueを返し、最初の要素を削除します。スタティッククラス、別のスレッドとイベント
ConnectedClient newClient; // ConnectedClient is my class storing it's socket and stream and all that.
if(NewClientConnected(out newClient)
{
...handling new client, notification, etc...
}
同じことが新しいパケット(プレフィックス付きストリームのスライス)のチェックになります。私はそれを次のレベルに持ち帰り、このようなことが起こったときにイベントを起こそうとし、新しいつながりで始めました。問題は、別のスレッドからイベントが発生し、イベントがform1.csで処理される際に例外が発生することです。
静的な非制御クラスのメインスレッドによってイベントが処理されるようにするにはどうすればよいですか?私は自分のやることをし続けるべきですか? (上記のスニペット)私は、コンシューマ・プロダクションの関係についての考えを聞いています。正しくリコールするには、タイマー(独自のスレッドを使用)または別のスレッドが必要です。
私はそれをGoogleに見せてここを見てみましたが、誰もが別の問題を抱えているようです。それは別のプロジェクト(私のサーバーとクライアントのテスト)がそれを参照している間、ライブラリプロジェクトにあります。
ありがとうございます。
このソリューションはWinFormsで動作します。 – Ondra
処理されたイベントで行われたすべての変更でControl.invokeが必要な場合、古いシステム(if-conditionsのリストを持つタイマー付きタイマー)はより効果的です。 –
このアプローチはDispatcherのものとほぼ同じです。違いはControl.InvokeはWinForms、Dispatcher.InvokeはWPF用 – Ondra