в .NET, Как да задам STAThread, когато изпълнявам формуляр в допълнителна нишка?

Пускам формуляр във втора тема. Ако направя Ctrl-C, за да копирам текст в клипборда, получавам изключение, „Текущата нишка трябва да бъде зададена на апартамент с една нишка (STA), преди да могат да се правят OLE извиквания. (Използването на клипборда очевидно включва OLE).

Поставянето на [STAThread] с моята процедура за нишка, която е входната точка на моята втора нишка, НЕ работи. Какво ще работи?

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

person Corey Trager    schedule 28.04.2009    source източник


Отговори (1)


Когато създавате нишката, извикайте SetApartmentState() метод, преди да го започнете. Не можете да направите това за нишки на пула от нишки.

Например:

Thread thread = new Thread(threadAction);
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
person Jon Skeet    schedule 28.04.2009