在静态方法中调用前台控件赋值
Application.Current.Dispatcher.Invoke(new Action(() =>
{
(Application.Current.MainWindow.FindName("textBox1") as TextBox).Text += str;
}));
private void Window_Loaded(object sender, RoutedEventArgs e)
{
//服务器IP地址
IPAddress ip = IPAddress.Parse("192.168.137.51");
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); ;
serverSocket.Bind(new IPEndPoint(ip, myProt));//绑定IP地址:端口
serverSocket.Listen(10);//设定最多10个排队连接请求
textBox1.Text += string.Format("启动监听{0}成功", serverSocket.LocalEndPoint.ToString() + Environment.NewLine);
//通过clientsocket发送数据
Thread myThread = new Thread(ListenClientConnect);
myThread.Start();
}
//监听客户端连接
private static void ListenClientConnect()
{
while (true)
{
Socket clientsocket = serverSocket.Accept();
clientsocket.Send(Encoding.ASCII.GetBytes("server say hello"));
Thread receiveThread = new Thread(ReceiveMessage);
receiveThread.Start(clientsocket);
}
}
//接收消息
private static void ReceiveMessage(object clientSocket)
{
Socket myClientSocket = (Socket)clientSocket;
while (true)
{
try
{
//通过clientsocket接收数据
int num = myClientSocket.Receive(result);
string str = string.Format("接收客户端{0}消息{1}", myClientSocket.RemoteEndPoint.ToString(), Encoding.UTF8.GetString(result, 0, num));
//UserName += str;
Application.Current.Dispatcher.Invoke(new Action(() =>
{
(Application.Current.MainWindow.FindName("textBox1") as TextBox).Text += str;
}));
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
myClientSocket.Shutdown(SocketShutdown.Both);
myClientSocket.Close();
break;
}
}
}