WPF を使用してマルチクライアント/サーバー チャットの小さなアプリケーションを作成しようとしていますが、いくつか問題があります。残念ながら、[接続] ボタンを押すと、プログラムがクラッシュします。
さて、私はこれまでクライアントプログラムで(スレッドで)それを行いました:
public delegate void UpdateText(object txt);
私はその方法を得ました:
private void UpdateTextBox(object txt)
{
if (msg_log.Dispatcher.CheckAccess())
{
Dispatcher.Invoke(new UpdateText(UpdateTextBox),txt);
}
else
{
msg_log.Dispatcher.Invoke(new UpdateText(UpdateTextBox), txt);
}
}
そして、次のようにサーバーに接続するために Button_Click イベントを使用しています。
private void connect_Click(object sender, RoutedEventArgs e)
{
if ((nick_name.Text == "") || (ip_addr.Text == "") || (port.Text == ""))
{
MessageBox.Show("Nick name, IP Address and Port fields cannot be null.");
}
else
{
client = new Client();
client.ClientName = nick_name.Text;
client.ServerIp = ip_addr.Text;
client.ServerPort = port.Text;
Thread changer = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(UpdateTextBox));
changer.Start();
client.OnClientConnected += new OnClientConnectedDelegate(client_OnClientConnected);
client.OnClientConnecting += new OnClientConnectingDelegate(client_OnClientConnecting);
client.OnClientDisconnected += new OnClientDisconnectedDelegate(client_OnClientDisconnected);
client.OnClientError += new OnClientErrorDelegate(client_OnClientError);
client.OnClientFileSending += new OnClientFileSendingDelegate(client_OnClientFileSending);
client.OnDataReceived += new OnClientReceivedDelegate(client_OnDataReceived);
client.Connect();
}
}
OnClient* イベントは次のようなものであることに注意してくださいprivate void client_OnDataReceived(object Sender, ClientReceivedArguments R) { UpdateTextBox(R.ReceivedData); }
したがって、これらのイベントは、「接続済み」などのテキストを msg_log TextBox に書き込む必要があります。
PS。txt オブジェクトは以前は文字列変数でしたが、ParameterizedThreadStart
私が知っているようにオブジェクトのみをパラメーターとして受け入れるため、変更しました。
どんな助けでも大歓迎です!
前もって感謝します、ジョージ
編集: Abe Heidebrecht が提案したように UpdateTextBox メソッドを編集しました。