c# - 大家好,我也尝试在 wpf 中为聊天应用程序创建服务器并给我这个错误
问题描述
错误错误
我不知道为什么当 Events_ClientConnected 运行给我这个错误并且我在互联网上搜索时给我这个错误我没有找到任何东西这是我的代码:
SimpleTcpServer server;
public Main_Window()
{
InitializeComponent();
server = new SimpleTcpServer(ip_txtbox.Text);
server.Events.DataReceived += Events_DataReceived;
server.Events.ClientConnected += Events_ClientConnected;
server.Events.ClientDisconnected += Events_ClientDisconnected;
}
public void start_btn_Click(object sender, RoutedEventArgs e)
{
log_txtbox.Text += Environment.NewLine + "*Starting server*";
server.Start();
log_txtbox.Text += Environment.NewLine + "*Done*";
}
private void Events_ClientDisconnected(object sender, ClientDisconnectedEventArgs e)
{
log_txtbox.Text += Environment.NewLine + e.IpPort + "Quit";
}
private void Events_ClientConnected(object sender, ClientConnectedEventArgs e)
{
log_txtbox.Text += Environment.NewLine + e.IpPort +"Join";
}
private void Events_DataReceived(object sender, DataReceivedEventArgs e)
{
log_txtbox.Text += Environment.NewLine + e.IpPort +":"+ Encoding.UTF8.GetString(e.Data);
}
private void stop_btn_Click(object sender, RoutedEventArgs e)
{
server.Stop();
log_txtbox.Text += Environment.NewLine + "*Server shutdown*";
}
解决方案
在 WPF 中,不是每个人都可以更改 UI 元素。在这种情况下,事件在不负责 UI 内容的线程上调用。
您必须调用调度程序来修改 UI,就像在这个问题中一样: 调用线程无法访问此对象,因为不同的线程拥有它
所以它可能应该是:
private void Events_ClientConnected(object sender, ClientConnectedEventArgs e)
{
this.Dispatcher.Invoke(() => log_txtbox.Text += Environment.NewLine + e.IpPort +"Join");
}