此问题已经在这里有了答案:
我正在开发一个GUI,用户可以在其中连接到服务器并读取数据。数据需要显示在GUI上。为此,我使用的TabControl的ContentTemplate设置为RichTextBox。
[当用户单击连接按钮时,UI连接到TCP服务器。在这里,我产生了一个新线程,该线程从服务器读取数据。但是,当将大量数据泵送到RTB之后,UI变得无响应。我无法在屏幕内移动该应用程序。
有什么方法可以动态删除较旧的数据(新数据将在下面添加),以免RTB加载过多,并且UI应该可以正常工作。此外,该应用程序在“任务管理器”中的“进程”下利用多达80个CPU。
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();
}
}
我正在开发一个GUI,用户可以在其中连接到服务器并读取数据。数据需要显示在GUI上。为此,我使用TabControl,其ContentTemplate设置为RichTextBox。当...