为什么我的GUI不能更新?

我正在创build一个程序,通过成千上万的Excel单元格,并分割string和表单,并根据这些数据填充图表。 我遇到的问题是与GUI。 我把程序分成两个独立的类。 一个处理Excel数据,另一个是WPF窗体的MainWindow类。

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

最初是build议我把职责分成多个线程,我已经这样做了,但似乎并不奏效。 这是我处理线程的方式吗? 我可以根据要求发布尽可能多的代码,但是这是很多的,所以如果它是简单的,我不想把它全部转储。

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中显示的时候,所有事情都是幕后的。

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