I used this function in a Windows forms
application:
delegate void ParametrizedMethodInvoker5(int arg); private void log_left_accs(int arg) { if (InvokeRequired) { Invoke(new ParametrizedMethodInvoker5(log_left_accs), arg); return; } label2.Text = arg.ToString(); }
But in WPF
it doesn't work. Why?
In WPF, the Invoke
method is on the dispatcher, so you need to call Dispatcher.Invoke
instead of Invoke
. Also, there is no InvokeRequired
property, but the dispatcher has a CheckAccess
method (for some reason, it's hidden in intellisense). So your code should be:
delegate void ParametrizedMethodInvoker5(int arg); void log_left_accs(int arg) { if (!Dispatcher.CheckAccess()) // CheckAccess returns true if you're on the dispatcher thread { Dispatcher.Invoke(new ParametrizedMethodInvoker5(log_left_accs), arg); return; } label2.Text= arg.ToString(); }
In WPF use the CheckAccess
method instead of InvokeRequired
if (!CheckAccess()) { // On a different thread Dispatcher.Invoke(() => log_left_accs(arg)); return; }
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