首先,这是我的第一个C#项目。我已经在这个项目上工作了大约6个月。
我们有一个winforms程序,它包含一个日志记录GUI。为了保持程序的其余部分响应,我想在一个单独的线程上创建日志gui,因为当很多东西正在进行时,它可能会非常密集。
这就是我尝试在新的GUI线程上打开表单的方法。一般来说它起作用并保持主要的响应。但是,我们现在随机获得一个AccessViolationException(http://pastebin.com/7tLtBSei),当它被激活时,我不知所措。
var thread = new Thread(() =>
{
loggingForm = new LoggingForm(Logger.path);
Application.Run(loggingForm);
});
thread.Name = "LoggingFormGUIThread";
thread.Start();
日志记录GUI只是批量读取日志文件并将其附加到RichTextBox。它不会触及任何托管代码。
答案 0 :(得分:1)
您需要将线程的单元状态设置为STA。
thread.SetApartmentState(ApartmentState.STA);
thread.Name = "LoggingFormGUIThread";
thread.Start();
许多用户界面组件(例如RichTextBox
)都需要这样才能正常运行。