将数据从VB.Net传输到Excel时,无法更新主窗口中的文本

时间:2014-09-02 19:44:41

标签: wpf vb.net excel

当运行从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)

...但主窗口仍未更新/显示状态文本。

0 个答案:

没有答案