これはエラーです:スローC#TCPクライアントがメッセージを送信しますが、サーバーがメッセージを受信していません
**
例外: のSystem.Windows.Formsの 'System.InvalidOperationExceptionが'。 dll追加情報:クロススレッド 操作が無効です:作成されたスレッド以外のスレッド からアクセスされたコントロール 'displayText'。
**
Iは、C#で使用してマルチスレッドクライアントとサーバーアプリケーションを作成しました。私はこのエラーについて調査されましたが、関連する回答は見つかりませんでした。私はこれが2つ以上のスレッドがプログラム上で始まったときに来ると知っています...しかし、私のサーバー側にはスレッドが1つあります...なぜこれが来るのか分かりません..........
ここに私のサーバー側は、次のとおりです。
private void Handler()
{
try {
byte[] b = new byte[100];
int k = s.Read(b, 0, b.Length);
//int k = s.Receive(b);
string szReceived = Encoding.ASCII.GetString(b,0,k);
//If the data to be converted is available only in sequential blocks (such as data read from a stream) or if the amount of data is so large that it needs to be divided into smaller blocks,
while (ServerRunning)
{
string ConcatString = "";
for (int i = 0; i < k; i++)
{
char n = Convert.ToChar(b[i]);
string chars = Convert.ToString(n);
ConcatString = ConcatString + chars;
}
if (b[0] == '$')
{
displayText.AppendText("\nPrivate Message");
//MessageBox.Show("\nPrivate Message" + Environment.NewLine);
}
else
{
displayText.AppendText("\n" + ConcatString);
//MessageBox.Show(ConcatString + Environment.NewLine);
}
//Encoding is the process of transforming a set of Unicode characters into a sequence of bytes and using new instance
ASCIIEncoding asen = new ASCIIEncoding();
//s.Send(asen.GetBytes("The string was recieved by the server." + Environment.NewLine));
displayText.AppendText("\n" + ConcatString);
/* clean up */
//*
// k = s.Receive(b);
s.Close();
client.Close();
//MessageBox.Show("Recieved..." + Environment.NewLine);
}
}
catch(Exception ex)
{
MessageBox.Show("Error ...." + ex);
}
}
私はソケットプログラミングに新しいですが、私は、一人ひとりのコードセグメントを調査し、数回にコードを実験した。..それでも私はこの中で逃した正確に何を把握することはできませんプログラム...
私はこれを解決するために手伝ってください...私は非常に高く評価されます...
あなたができない別のスレッドからUIを更新しようとしたためにエラーが発生しました。このメッセージのタイトルと本文は一致しませんでした – BugFinder
あなたのサーバーはメッセージを受信しています他のスレッドから 'displayText'コントロールにアクセスしようとしています。これはできません。 –
@reneが言い、実際のエラーを理解しようとすると、ソケットについて何も言及していないことに気づくでしょう。 –