Cześć, chcę wywołać kod z wątku głównego, będąc w wątku pobocznym. Znalazłem, że jest taka klasa Dispatcher, więc próbowałem ją ogarnąć:
Forma główna aplikacji:
Dispatcher m_mainThreadDispatcher;
public MainForm()
{
InitializeComponent();
m_mainThreadDispatcher = Dispatcher.CurrentDispatcher;
}
//i metoda pomocnicza do wywoływania kodu na głównym wątku:
public void ExecuteInApplicationContext(Action action)
{
if (Thread.CurrentThread != m_mainThreadDispatcher.Thread)
m_mainThreadDispatcher.Invoke(action, null);
else
action.Invoke();
}
I chciałem tego użyć w taki sposób:
void DoWorkInThread()
{
Thread th = new Thread(new ThreadStart(ThreadDoWork));
th.Name = "TypingThread";
th.Priority = ThreadPriority.Normal;
th.Start();
//nie mogę zrobić th.Join, bo mam formę z progressem operacji
}
void ThreadDoWork()
{
DoTheWork(); //tutaj leci całe zadanie do wykonania
//jak zadanie się wykona, to ma się wykonać kod na głównym wątku
((MainForm)Application.Forms[0]).ExecuteInApplicationContext(
new Action(
() =>
{
DoSomeWorkInMainThread();
}
)
);
}
I problem jest taki, że ExecuteInApplicationContext się wywołuje, ale już DoSomeWorkInMainThread się nie wykonuje. Gdzie jest problem?