2011-10-31 13 views
0

初めてのポスターはこちら!機能終了後に関数を呼び出す

私はシニアコンピュータサイエンスの学生です。私は現在、telnetを使ってボードゲーム(othello)をオンラインで実行するGUIを開発しています。

擬似はこのようなものです...

  • クリックボタン
  • 更新GUI
  • レシーブのtelnetの入力
  • 更新GUI

すすぎと繰り返し!

問題はありますが、telnet関数をどのように取得するかは、Clickイベントハンドラの中に入れておきますが、GUIは関数全体が終了するまで更新されません。それは1つではなく2つの移動ごとに更新されます。ある関数が終了した後に新しい関数を即座に呼び出すようにC#(私が新しかった)を伝える方法はありますか?具体的にはGUI上に表示されます。

任意の入力は、私が問題を正しく理解わからないんだけど、「telnetの入力を受け取る」の行は、私は多くのことを心配せ おかげ

+3

スレッドを使用する必要があります。 – SLaks

+0

またはイベント処理ループ。 – ObscureRobot

+0

.NET 4を使用している場合は、TPLに行く!どのようにRx拡張機能がTPL APIをサポートしていないのか – Zenwalker

答えて

3

を高く評価しています。

非同期TCP/IP通信を使用せずにこのアプリケーションを1つのスレッドで作成していますか?

答えが「はい」の場合、使用しているアーキテクチャにエラーがあります。

たとえば、非同期ソケットまたは非同期ストリームを使用して、別のスレッドが並行して実行されている非同期tcp/ip通信が必要です。

ネットワークを待っているGUIを停止することはできません。これはアーキテクチャが悪いことです。

がCodeProjectの上で、この単純だが、完全な記事を読むことをお試しください:http://www.codeproject.com/KB/IP/socketsincs.aspx

のWindows OSは、Windowsを処理するために、「メッセージポンプ」と呼ばれるものを使用しています。すべてが単一のスレッド(アプリケーションスレッド)によって処理されるメッセージです。 イベントはメッセージキューにエンキューされます。 メインスレッドの実行を長時間停止すると、メッセージキューが処理されなくなり、レンダリングはエンキューできるウィンドウメッセージでもあるため、ユーザー入力とペイントも停止します。

+0

申し訳ありませんが、スレッドです!ありがとう、私はこれをtommorowに見ていきます。私は本当に迅速かつ明確な回答に感謝します! – cpb

0

スレッドを使用する必要があります。このようにして、あるスレッドがまだ処理している間に新しいスレッドを起動することができます。私はこれが、同時に別のタスクを処理しながら同時に1つのタスクを処理することができる唯一の方法だと思います。

タスクが完了したら、に参加してメインスレッドに戻ります。

+0

ありがとうございました! – cpb

関連する問題