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"; }));
Expanding on other answers a little.
Action
with no parameters:
_uiDispatcher.Invoke(new Action(() =>
{
// Do stuff
textBox1.Text = "Test 123";
}));
Action
with 1 parameter:
_uiDispatcher.Invoke(new Action<bool>((flag) =>
{
if (flag)
{
// Do stuff
textBox1.Text = "Test 123";
}
}));
Action
with 2 parameters:
_uiDispatcher.Invoke(new Action<int, string>((id, value) =>
{
// Do stuff
textBox1.Text = $"{value} {id}";
}));
And so on...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With