Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In WPF, what is the equivalent of Suspend/ResumeLayout() and BackgroundWorker() from Windows Forms

If I am in a function in the code behind, and I want to implement displaying a "Loading..." in the status bar the following makes sense, but as we know from WinForms is a NoNo:

StatusBarMessageText.Text = "Loading Configuration Settings...";            
LoadSettingsGridData();
StatusBarMessageText.Text = "Done";

What we all now from WinForms Chapter 1 class 101, is the form won't display changes to the user until after the Entire Function completes... meaning the "Loading" message will never be displayed to the user. The following code is needed.

Form1.SuspendLayout();    
StatusBarMessageText.Text = "Loading Configuration Settings...";                
Form1.ResumeLayout();

LoadSettingsGridData();

Form1.SuspendLayout();    
StatusBarMessageText.Text = "Done";
Form1.ResumeLayout();

What is the best practice for dealing with this fundamental issue in WPF?

like image 871
mrbradleyt Avatar asked Sep 17 '08 12:09

mrbradleyt


1 Answers

Best and simplest:

using(var d = Dispatcher.DisableProcessing())
{
    /* your work... Use dispacher.begininvoke... */
}

Or

IDisposable d;

try
{
    d = Dispatcher.DisableProcessing();
    /* your work... Use dispacher.begininvoke... */
} finally {
    d.Dispose();
}
like image 188
Ernest Avatar answered Sep 19 '22 08:09

Ernest