Neither of these work:
_uiDispatcher.Invoke(() => { });
_uiDispatcher.Invoke(delegate() { });
All I want to do is Invoke an inline method on my main UI thread. So I called this on the main thread:
_uiDispatcher = Dispatcher.CurrentDispatcher;
And now I want to execute some code on that thread from another thread. How do I do it? Am I using the wrong syntax?
Note that this is not a WPF application; I've referenced WindowsBase
so I could get access to the Dispatcher
class.
The problem is that you aren't providing the exact type of delegate you want to invoke. Dispatcher.Invoke
just takes a Delegate
. Is it an Action<T>
? If so, what is T
? Is it a MethodInvoker
? Action
? What?
If your delegate takes no arguments and returns nothing, you can use Action
or MethodInvoker
. Try this:
_uiDispatcher.Invoke(new Action(() => { }));
this.Dispatcher.Invoke((Action)(() => { textBox1.Text = "Test 123"; }));
Unless I've missed something, all you've told us is this is not a WPF application. I don't think the Dispatcher is the correct class to use.
If this is a WinForm app, your UI thread can be accessed via the WindowsFormsSynchronizationContext