The following method does not apply the wpf changes (background = red) until the 2nd method (DoWork) exits:
private void change()
{
Background = Brushes.Red;
Dispatcher.BeginInvoke((Action) DoWork);
}
DoWork() takes several seconds to run and I don’t really want to put it into a thread, as this code will be used in several places and will probably interact will the Dispatcher thread at various intervals. I’ve tried calling the Invalidate…() methods, but to no avail. The BeginInvoke() was added to see if the delay would allow the background change to be applied before the logic was called. Typically, the logic would be part of this method. Btw, most of the logic is performed on a different thread and shouldn’t block the Dispatcher thread?!
Can someone please help?
Thanks
The “Dispatcher” thread is the UI thread.
When you call
Dispatcher.BeginInvoke((Action) DoWork);, you’re basically blocking the UI thread untilDoWorkexits, since it’s running on the UI thread.This will prevent the UI from updating, hence you don’t see the background change.
You really should consider moving
DoWorkonto a background thread, either via the ThreadPool directly, a BackgroundWorker, or some other means. That would completely correct this problem, and prevent you from blocking the UI thread for a “few seconds” (which will happen if you run this using the Dispatcher’s threading).