in .NET, How do I set STAThread when I'm running a form in an additional thread?

与世无争的帅哥 提交于 2019-12-20 06:30:05

问题


I'm running a form in a second thread. If I do Ctrl-C to copy text on the clipboard, I get an Exception, "Current thread must be set to a single thread apartment (STA) before OLE calls can be made. (Using the clipboard involves OLE apparently).

Putting the [STAThread] with my thread proc, which is the entry point of my second thread does NOT work. What will work?

[STAThread]
private void MyFormThreadproc(object o)
{
    form = new MyForm();
    Application.Run(form);
}

回答1:


When you create the thread, call the SetApartmentState() method before you start it. You can't do this for threadpool threads.

For example:

Thread thread = new Thread(threadAction);
thread.SetApartmentState(ApartmentState.STA);
thread.Start();


来源:https://stackoverflow.com/questions/798761/in-net-how-do-i-set-stathread-when-im-running-a-form-in-an-additional-thread

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!