mrb*_*eyt 13 .net c# wpf backgroundworker
如果我在后面的代码中的函数中,并且我想在状态栏中实现显示"正在加载...",则以下内容是有意义的,但正如我们从WinForms中知道的那样是NoNo:
StatusBarMessageText.Text = "Loading Configuration Settings...";
LoadSettingsGridData();
StatusBarMessageText.Text = "Done";
Run Code Online (Sandbox Code Playgroud)
我们现在从WinForms第1章101类开始,在整个函数完成之前,表单不会显示对用户的更改...意味着"加载"消息将永远不会显示给用户.需要以下代码.
Form1.SuspendLayout();
StatusBarMessageText.Text = "Loading Configuration Settings...";
Form1.ResumeLayout();
LoadSettingsGridData();
Form1.SuspendLayout();
StatusBarMessageText.Text = "Done";
Form1.ResumeLayout();
Run Code Online (Sandbox Code Playgroud)
在WPF中处理这个基本问题的最佳做法是什么?
小智 33
最简单的:
using(var d = Dispatcher.DisableProcessing())
{
/* your work... Use dispacher.begininvoke... */
}
Run Code Online (Sandbox Code Playgroud)
要么
IDisposable d;
try
{
d = Dispatcher.DisableProcessing();
/* your work... Use dispacher.begininvoke... */
} finally {
d.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
实现此功能的最简单方法是将 LoadSettingsGridData 添加到调度程序队列。如果您将操作的 DispatcherPriority 设置得足够低,布局操作就会发生,您就可以开始了。
StatusBarMessageText.Text = "Loading Configuration Settings...";
this.Dispatcher.BeginInvoke(new Action(LoadSettingsGridData), DispatcherPriority.Render);
this.Dispatcher.BeginInvoke(new Action(() => StatusBarMessageText.Text = "Done"), DispatcherPriority.Render);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23989 次 |
| 最近记录: |