C#多线程表单中的AccessViolationException

时间:2014-01-31 19:33:53

标签: c# .net multithreading winforms access-violation

首先,这是我的第一个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。它不会触及任何托管代码。

1 个答案:

答案 0 :(得分:1)

您需要将线程的单元状态设置为STA。

thread.SetApartmentState(ApartmentState.STA);
thread.Name = "LoggingFormGUIThread";
thread.Start();

许多用户界面组件(例如RichTextBox)都需要这样才能正常运行。