我正在开发一个GUI,用户可以在其中连接到服务器并读取数据。数据需要显示在GUI上。为此,我使用TabControl,其ContentTemplate设置为RichTextBox。
当用户单击“连接”按钮时,UI将连接到TCP服务器。在这里,我产生了一个新线程,该线程从服务器读取数据。但是,当将大量数据泵送到RTB之后,UI变得无响应。我无法在屏幕内移动应用。
为什么我的UI无法响应。我可以删除实时出价工具中的旧数据,而动态添加新数据吗? 有什么方法可以动态删除较旧的数据(新数据将在下面添加),以免RTB加载过多,并且UI应能正常工作。此外,该应用程序在任务管理器中的进程下利用多达80个CPU 我是C#和WPF的新手。任何线索将不胜感激。
private void BtnConnect_Click(object sender, RoutedEventArgs e)
{
//connect
TCPClientClass tcpClient = TCPConnHandler.ConnectToService(tbIPAddress.Text);
if (tcpClient != null)
{
MessageBox.Show("Connected to " + tbIPAddress.Text);
//open new tab
var item = MainWindowVMObj.AddTabItem();
Thread thTabControl = new Thread(() =>
{
while (tcpClient.Connected)
{
String str = tcpClient.GetDataFromServer();
if (!String.IsNullOrEmpty(str))
tabControl1.Dispatcher.BeginInvoke((Action)(() => item.Content += str));
Thread.Sleep(200);
}
//item.Dispatcher.BeginInvoke
});
thTabControl.Start();
}
}
答案 0 :(得分:0)
这里的问题是您正在执行很多字符串连接(item.Content += str
),并且会对性能产生巨大的影响(也导致CPU和RAM的使用)。
请尽量将内容保留在框中,例如仅保留最后十条消息。或者代替串联,将RichTextBox
替换为基于列表的控件。然后只将最后几条消息保留在列表中。