Я пытаюсь запустить приложение как минимум с двумя потоками: одна форма для пользовательского интерфейса и один или несколько рабочих потоков.Они совместно читают / пишут из статического класса через ряд других классов.
Вот почему я передаю экземпляр рабочего класса в форму отображения.Я думаю, именно поэтому для меня это идет не так:
public class CoCoon
{
private Screen displayForm;
private Worker worker;
public ThreadedApp()
{
worker = new Worker (1024);
displayForm = new Screen(worker);
}
public void Run()
{
//thread 1: display form
Thread screenThread = new Thread(() => Application.Run(displayForm));
//thread 2: background worker
Thread workerThread = new Thread(worker.Run) {IsBackground = true};
screenThread.Start();
Thread.Sleep(1000); //if I don't wait a while, I get an ObjectDisposedException!
workerThread.Start();
}
Потоки и объекты инициируются просто отлично, но как только после обработки метода Form_Load в Application.Run выдается ошибка.(displayForm) строка выше.Это NotSupportedException, с замечанием, что я должен использовать Control.Invoke.Но я не уверен, что понимаю, потому что я не позволяю темам, кроме формы отображения, использовать элементы управления на ней.
Я новичок в потоках.Может ли кто-нибудь помочь мне на моем пути?Спасибо!
PS: Одна деталь - я разрабатываю это для платформы Windows Mobile.
РЕДАКТИРОВАТЬ После популярного запроса настоящим Stack Trace
at Microsoft.AGL.Common.MISC.HandleAr(PAL_ERROR ar)\r\n at
System.Windows.Forms.Control.get_Visible()\r\n at
System.Windows.Forms.Form._SetVisibleNotify(Boolean fVis)\r\n at
System.Windows.Forms.Control.set_Visible(Boolean value)\r\n at
System.Windows.Forms.Application.Run(Form fm)\r\n at
CoCoonWM6.CoCoon.<Run>b__1()\r\n