こんにちは、invoke とスレッドを使用するプロジェクトに取り組んでいます。これは、チャット機能を備えた単純なリモート デスクトップ プログラムです。インターネット上で c# winform のサンプルを入手しましたが、それを wpf に変換したいと思います。 wpfプログラムを使用して別のクライアントにメッセージを送信する際の問題ですが、他のクライアントから送信されたメッセージを受信できません(または読み取ることができません)..スレッドとinvokeメソッドに関係があると思います.wpfの呼び出しが異なることを読みましたそして私はdispatcher.invokeを試しましたが、それでもうまくいきません
よろしくお願いします
ここにコードがあります
wait = new Thread(new ThreadStart(waitForData));
wait.Start();
上記のスニペットは、tcpclient で接続が成功したときに実行されます
private void waitForData()
{
try
{
NetworkStream read = tcpclnt.GetStream();
while (read.CanRead)
{
byte[] buffer = new byte[64];
read.Read(buffer, 0, buffer.Length);
s = new ASCIIEncoding().GetString(buffer);
System.Console.WriteLine("Recieved data:" + new ASCIIEncoding().GetString(buffer));
rcvMsg = new ASCIIEncoding().GetString(buffer) + "\n";
hasNewData = true;
bool f = false;
f = rcvMsg.Contains("##");
bool comand = false;
comand = rcvMsg.Contains("*+*-");
/*File receive*/
if (f)
{
string d = "##";
rcvMsg = rcvMsg.TrimStart(d.ToCharArray());
int lastLt = rcvMsg.LastIndexOf("|");
rcvMsg = rcvMsg.Substring(0, lastLt);
NetworkStream ns = tcpclnt.GetStream();
if (ns.CanWrite)
{
string dataS = "^^Y";
byte[] bf = new ASCIIEncoding().GetBytes(dataS);
ns.Write(bf, 0, bf.Length);
ns.Flush();
}
try
{
new Recieve_File().recieve_file(rcvMsg);
}
catch (Exception ec)
{
System.Console.WriteLine(ec.Message);
}
}
/*Command-shutdown/restart/logoff*/
else if (comand)
{
string com = "*+*-";
rcvMsg = rcvMsg.TrimStart(com.ToCharArray());
execute_command(rcvMsg);
}
else
{
this.Invoke(new setOutput(setOut));
Thread.Sleep(1000);
}
}
}
catch (Exception ex)
{
wait.Abort();
output.Text += "Error..... " + ex.StackTrace;
}
}
上記のスニペットは、メッセージまたはコマンドがあるかどうかをリッスンするコードです。行 this.invoke(new setoutput(setout)) は、rtb にテキストを追加するためのコードです
誰かが私を助けてくれることを願っています