C# windows窗体应用程序中richtextbox上的即时日志显示

C# windows窗体应用程序中richtextbox上的即时日志显示,c#,winforms,multithreading,.net-3.5,log4net,C#,Winforms,Multithreading,.net 3.5,Log4net,我有一个应用程序,我想在windows窗体richtextbox上显示日志(使用log4net)。我从log4net获取日志消息,但是当GUI响应时,我无法在对话框上显示它。有什么帮助吗 您应该在一个线程上运行表单,在另一个线程上运行计算,这将更新表单对象。是的,我已经尝试使用backgroundworker:-这是我的部分代码public void DisplayLog(string strPrint,ListBox printBox){if(printBox.InvokeRequired){

我有一个应用程序,我想在windows窗体richtextbox上显示日志(使用log4net)。我从log4net获取日志消息,但是当GUI响应时,我无法在对话框上显示它。有什么帮助吗

您应该在一个线程上运行表单,在另一个线程上运行计算,这将更新表单对象。

是的,我已经尝试使用backgroundworker:-这是我的部分代码public void DisplayLog(string strPrint,ListBox printBox){if(printBox.InvokeRequired){toboxcallback ptbCallback=new PrintToBoxCallback(PrintToBox);printBox.BeginInvoke(ptbCallback,strPrint,printBox);}else printBox.Items.Add(strPrint);}私有void bgWorker_DoWork(对象发送方,DoWorkEventArgs e){DisplayLog(e.Argument.ToString(),displayListBox);}公共void ShowStatus(字符串消息){Console.WriteLine(message);if(!bgWorker.IsBusy)bgWorker.RunWorkerAsync(message);}oh现在我知道代码没有任何问题,因为我可以在整个应用程序运行时查看活动线程(主线程和工作线程)但是工作线程似乎在等待主线程完成它的工作。在我的例子中,主线程执行一些功能并记录消息。因此,我正在获取由主线程处理的日志数据,并尝试使用工作线程(backgroundworker)显示到列表框。应该有办法做到这一点…任何Clueeee?当我挂起正在运行的主线程时,工作线程开始工作,我可以只打印框上的一行。我不知道它如何在不考虑主线程状态的情况下继续打印…问题解决了!为获取日志的方法添加一个backgroundworker。这意味着e应用程序运行良好,包括主线程在内的三个线程分别运行。谢谢。