WPF中LABEL文本不及时更新的问题,求指导

ja12 ja12 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
在学习WPF的时候发现Label的Content在程序运行中改变时不在窗体上立即更新,而总是只显示最后一次赋值结果。用了几种方法都是这样,求大神指导。以下为我的代码。
第一种:
前台:
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid Name="grid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="249*" />
<ColumnDefinition Width="254*" />
</Grid.ColumnDefinitions>
<Label Name="state" Margin="0,0,0,247" Grid.ColumnSpan="2" Content="{Binding Path=Textstring,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Background="Brown"/>
<Button Grid.ColumnSpan="2" Height="43" VerticalAlignment="Bottom" Margin="142,0,150,168" Name="Button1">运行</Button>
</Grid>
</Window>
后台:
Imports System.Threading
Imports System.ComponentModel
Imports System.Windows.Threading

Class MainWindow
Partial Class TextState
Implements INotifyPropertyChanged
Private _Textstring As String
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Public Property Textstring As String
Get
Return _Textstring
End Get
Set(ByVal value As String)
_Textstring = value
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("Textstring"))
End Set
End Property
End Class
Public mystring As String

Private Sub Button1_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button1.Click
mystring = "正在进行计算,请稍后"
Dim TextState1 As New TextState
state.DataContext = TextState1
TextState1.Textstring = mystring
For i = 0 To 2
TextState1.Textstring = i
Next
End Sub
End Class
第二种:
前台
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid Name="grid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="249*" />
<ColumnDefinition Width="254*" />
</Grid.ColumnDefinitions>
<Label Name="state" Margin="0,0,0,248" Grid.ColumnSpan="2" Background="Brown"/>
<Button Grid.ColumnSpan="2" Height="37" VerticalAlignment="Bottom" Margin="165,0,179,170" Name="Button1">运行</Button>
</Grid>
</Window>
后台:
Imports System.Threading
Imports System.ComponentModel
Imports System.Windows.Threading
Class MainWindow
Public mystring As String
Private Delegate Sub MyDelegate(mystring As String)
Private Sub ThreadMethod()
If state.Dispatcher.CheckAccess() Then
Settext(mystring)
Else
Dim myDelegate As MyDelegate = New MyDelegate(AddressOf Settext)
state.Dispatcher.BeginInvoke(DispatcherPriority.Send, myDelegate, mystring)
End If
End Sub
Private Sub Settext(mystring As String)
state.Content = mystring
End Sub
Private Sub Button1_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button1.Click
Dim myThread As Thread = New Thread(AddressOf ThreadMethod)
myThread.IsBackground = True
mystring = "正在进行计算,请稍后"
myThread.Start()
For i = 0 To 2
mystring = i
Next
End Sub
End Class
...全文

相关推荐

评论 11
收藏 已收藏
分享
返回顶部
ja12
VB 16,718 成员 110,520 内容