如何在例程中更新UI? 例如:
Private sub foo()
myTextBlock.Text = "Phase 1"
DoSomething
myTextBlock.Text = "Phase 2"
DoSomething
End Sub
更具体,更复杂,第1阶段是使用WebClient下载文件,第2阶段是执行该文件,但只有在下载完成后才能启动。
答案 0 :(得分:0)
我认为您无法看到UI更新,因为您的 DoSomething Sub正在主(UI)线程中执行。请尝试使用Async / Await。
下面是文件下载的模拟:
MainWinwow.xaml
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Test Window" Height="200" Width="400"
Loaded="Window_Loaded">
<StackPanel>
<TextBlock x:Name="TextBlockControl" />
</StackPanel>
</Window>
MainWindow.xaml.cs
Class MainWindow
Private Async Sub Window_Loaded(sender As Object, e As RoutedEventArgs)
TextBlockControl.Text = "Downloading file..."
Await Task.Run(Sub() DownloadFile())
TextBlockControl.Text = "Reading file..."
Await Task.Run(Sub() ReadFile())
TextBlockControl.Text = "Finished :)"
End Sub
Private Sub ReadFile()
Threading.Thread.Sleep(2000)
End Sub
Private Sub DownloadFile()
Threading.Thread.Sleep(1500)
End Sub
End Class
另外考虑使用Binding,在WPF中,Binding就是这样。
答案 1 :(得分:-1)
WPF是关于数据绑定的,但是,您也可以在代码中设置它。
首先,在XAML中为控件命名:
<TextBlock
x:Name="myTextBlock">
</TextBlock>
要使用x:Name
,必须包含以下命名空间
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
现在,您可以在代码中使用您的控件(在本例中为myTextBlock
):
myTextBlock.Text = "Phase 1"