嗨,我正在开发一个使用调用和线程的项目。它是一个简单的远程桌面程序,带有聊天功能。我在互联网上用 c# winform 获得了一个示例,但我想将它转换为 wpf 。我没有使用 wpf 程序向另一个客户端发送消息时出现问题,但它无法接收(或无法读取)来自其他客户端的发送消息。我认为这与线程和调用方法有关,我读到 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 中附加文本的代码
希望有人可以帮助我谢谢