为什么我的GUI不会更新?

时间:2014-08-04 18:41:46

标签: wpf vb.net multithreading excel visual-studio-2012

我正致力于创建一个程序,该程序通过数千个excel单元格工作,并分割字符串和表单,并根据该数据填充图表。我遇到的问题是GUI。我将程序拆分为两个单独的类。一个处理excel数据,另一个是WPF表单的MainWindow类。

问题在于MainWindow不会随着信息的更新而更新。它应该更新一个对话框和一个进度条,显示它完成的步骤。它没有做任何事情,但终于出现在最后完全充满,好像它一直在这样做。

最初向我建议我将职责分成多个线程并且我已经完成了但是它似乎没有用。这是我处理线程的方式吗?我可以按照要求发布尽可能多的代码但是它很多,所以如果它很简单,我就不想把它全部转储。

Private Sub runButton_Click(sender As Object, e As RoutedEventArgs) Handles runButton.Click

    If FillCheck() = True Then
        program = New ExcelClass(dataText.Content.ToString, saveText.Content.ToString)
        Dim excelThread As New System.Threading.Thread(AddressOf program.beginProgram)
        excelThread.Start()
        checkUpdate()

    ElseIf FillCheck() = False Then
        MsgBox("You must select both the file to get the data from and the target folder and filename", MsgBoxStyle.OkOnly, "Fill Error")

    Else
        MsgBox("Something has gone terribly amiss. Panic", MsgBoxStyle.OkOnly, "Error")
    End If
End Sub

此代码只是MainWindow类中声明和初始化第二个线程的部分。正如我所说,它完成了应该做的事情,但是当我希望它在GUI中显示时,它都是幕后的。

1 个答案:

答案 0 :(得分:2)

您可以使用BackgroundWorker类在后台“发送”任务(有关详细信息,请参阅MSDN guide)。 特别是你应该查看 WorkerReportsProgress 属性(它应该设置为true),当你处理数据时,你可以使用 ReportProgress 方法报告进度,你应该订阅 ProgressChanged 事件将这些更改反映到UI。