相关疑难解决方法(0)

Dispatcher.CurrentDispatcher与Application.Current.Dispatcher

Dispatcher.CurrentDispatcher(in System.Windows.Threading)和Application.Current.Dispatcher(in System.Windows)之间有什么区别?

我的直觉告诉我,Application.Current.Dispatcher永远不会改变,并且对当前应用程序中的所有线程都是全局的,同时Dispatcher.CurrentDispatcher可能会Dispatcher根据调用它的线程创建一个新实例.

那是对的吗?

如果是,Dispatcher.CurrentDispatcher主要用于多线程UI 的目的是什么?

.net wpf dispatcher

72
推荐指数
3
解决办法
5万
查看次数

我可以在让用户等待之前更新WPF StatusBar文本吗?

我有一个带状态栏的WPF应用程序.

<StatusBar Grid.Row="1"
           Height="23"
           Name="StatusBar1"
           VerticalAlignment="Bottom">
    <TextBlock Name="TextBlockStatus" />
</StatusBar>
Run Code Online (Sandbox Code Playgroud)

我想在那里显示文本并在我做少量工作时切换到沙漏等待光标.

此代码将更新光标,但StatusBar 文本不会更新 ...

Cursor = Cursors.Wait
TextBlockStatus.Text = "Loading..."
System.Threading.Thread.Sleep(New TimeSpan(0, 0, 3))
TextBlockStatus.Text = String.Empty
Cursor = Cursors.Arrow
Run Code Online (Sandbox Code Playgroud)

更新

灵感来自亚历山德拉答案 ......

如果我这样做的话,它会起作用,但我对这个解决方案并不满意.有更简单的方法吗?

Delegate Sub Load1()
Sub Load2()
    System.Threading.Thread.Sleep(New TimeSpan(0, 0, 3))
End Sub
Dim Load3 As Load1 = AddressOf Load2

Sub Load()
    Cursor = Cursors.Wait
    TextBlockStatus.Text = "Loading..."
    Dispatcher.Invoke(DispatcherPriority.Background, Load3)
    TextBlockStatus.Text = String.Empty
    Cursor = Cursors.Arrow
End Sub
Run Code Online (Sandbox Code Playgroud)

我宁愿它看起来像这样......

Sub Load()
    Cursor = …
Run Code Online (Sandbox Code Playgroud)

.net wpf multithreading statusbar backgroundworker

4
推荐指数
1
解决办法
7698
查看次数