3

私はVB.netとソケットプログラミングが初めてで、これは初心者の質問なので、よろしくお願いします:)

アプリのような単純な非同期チャット サーバーの作成に関する多数の記事を読みました。プログラミングは初めてではありませんが、私はまだ .net でモデルを学習する初期段階にあります。

この Microsoft vb.net と c のシャープな例は、クライアントの接続をリッスンする非同期サーバーであると想定されていますが、vb.net フォームのコードをコピーして Window Loaded イベント ハンドラーに貼り付けると、GUI がブロックされます。理由がわかりません。非同期であると想定されています。クライアント コードを別の vb.net フォームに貼り付けて実行するまで、ウィンドウは表示されません。次に、サーバー上の GUI が表示されます。:(

ありがとう

4

2 に答える 2

2

メインスレッドwhile (true)で呼び出されたときにそれを参照してください?StartListeningそのことは実際にはそれが呼び出されたスレッドを完全に使用します。

それはまだ非同期です。問題は、何が何と非同期であるかです。ソケットを調整するこのメインメソッドがあり、IOは実際にはそれに非同期です。ただし、メソッド自体は、それを呼び出しているコードに対して必ずしも非同期ではありません。

于 2013-03-04T22:19:35.590 に答える
1

StartListeningUI スレッドで呼び出さないでください。新しいスレッドから呼び出すか、UI スレッド モデルで動作するように書き直してください。その後、期待どおりに非同期に機能します (ただし、クロススレッド アクセスなどの新しい問題が発生する可能性があります)。

この例では、呼び出しがStartListening() 返されないか、プログラムがすぐに終了することに注意してください。つまり、この例は非同期操作の使用を示していますが、これらは「同期」コンソール プログラムにラップされています。結局のところ、これはサンプルであり、直接構成するように設計されたコンポーネントではありません。

于 2013-03-04T22:24:22.337 に答える