当运行从VB.Net(WPF)到Excel的简单数据传输时,我可以正确保存所有数据。
我的问题是让VB在主窗口中更改文本块的文本,用于向用户指示操作状态(下面参考代码中的“textblock_in_main_window_Comment”)。
然后,在我通过对话框确认保存操作后,窗口标题(“Me.Title”)正在改变(“如果结果=真则那么”)。
但没有改变文本块。
Private Sub Save_Data_to_Excel()
Dim SaveDLG As New Microsoft.Win32.SaveFileDialog
SaveDLG.Filter = "Excel Files (*.xlsx)|*.xlsx|Excel Files (*.xls)|*.xls"
Dim result As Boolean = SaveDLG.ShowDialog()
If result = True Then
textblock_in_main_window_Comment.Text = "Saving..." ' when debugging, text is not changed
Me.Title = "My Program - " + SaveDLG.FileName ' when debugging, window title is changed
Dim saveExcel As New Excel.Application
saveExcel.Workbooks.Add()
saveExcel.Range("A1").Activate()
For i = 0 To 200
saveExcel.ActiveCell.Value = data_array(i)
saveExcel.ActiveCell.Offset(0, 1).Activate()
Next
saveExcel.DisplayAlerts = False
saveExcel.ActiveWorkbook.SaveAs(SaveDLG.FileName)
saveExcel.Workbooks.Close()
saveExcel.DisplayAlerts = True
saveExcel = Nothing
MessageBox.Show("The Project has been saved")
End If
End Sub
为什么会发生这种情况? 在实际数据传输过程开始之前,您如何建议更改代码以更新文本块中的文本?
我尝试了Sheridan建议的解决方案,参考。 Update WPF Window Asynchronously:
添加了一个功能
Private Function RunOnUiThread(ByVal method As Action) As Object
Return Dispatcher.Invoke(Windows.Threading.DispatcherPriority.Normal, method)
End Function
并替换状态行:
RunOnUiThread(Sub()
TBL_Main_Status_Comment.Text = "Saving..."
End Sub)
...但主窗口仍未更新/显示状态文本。