AccessViolationException在C#中的多线程形式(AccessViolation

2019-10-19 07:29发布

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

Answer 1:

您需要设置线程STA的公寓状态。

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

这是必需的许多用户接口组件(如RichTextBox ),以正确地起作用。



文章来源: AccessViolationException in C# multithreaded form