来自第二个模块的VB.NET backgroundworker

来自第二个模块的VB.NET backgroundworker,vb.net,module,progress-bar,backgroundworker,Vb.net,Module,Progress Bar,Backgroundworker,frmMain有一个启动后台工作程序的按钮 Private Sub btnProcessITN_Click(sender As Object, e As EventArgs) Handles btnProcessITN.Click Me.frmMainProgressBar.Visible = True Me.btnProcessITN.Text = "working..." & Me.frmMainProgressBar.Value & "%" Me.b

frmMain有一个启动后台工作程序的按钮

Private Sub btnProcessITN_Click(sender As Object, e As EventArgs) Handles btnProcessITN.Click
    Me.frmMainProgressBar.Visible = True
    Me.btnProcessITN.Text = "working..." & Me.frmMainProgressBar.Value & "%"
    Me.btnProcessITN.Enabled = False


    backgroundWorker2.WorkerReportsProgress = True
    BackgroundWorker2.RunWorkerAsync()
End Sub

Private Sub backgroundWorker2_DoWork(ByVal sender As Object, ByVal e As    System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker2.DoWork
    ProcessITN()
End Sub
ProcessITN生活在现代。这个运行,做它的事情,然后是问题

Public Sub ProcessITN()
...doing work here....
    frmMain.updateProgress(current, Max)       
End Sub
回到表单main,我有一个函数,它试图更新后台工作人员的进度,并更新表单上的进度条

Public Function updateProgress(current As Integer, Max As Integer) As Boolean

    BackgroundWorker2.ReportProgress((current / Max) * 100)
    Return True
End Function


Private Sub backgroundWorker2_ProgressChanged( _
    ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) _        Handles BackgroundWorker2.ProgressChanged
    Me.frmMainProgressBar.Value = e.ProgressPercentage
    Me.btnProcessITN.Text = "working..." & Me.frmMainProgressBar.Value & "%"
    'Me.txtProgress.Text = Me.txtProgress.Text & vbNewLine & strMessage
    Me.txtProgress.AppendText(vbNewLine & strMessage)
End Sub
现在的问题是,尽管代码正在运行,并且值从modITN正确传递到了frmMain,但表单本身并没有刷新。进度条不会更改。txtProgress不会改变


注意:当modITN中的内容在frmMain中时,这个代码工作得很好。我移动它来整理我的代码

我已经解决了这个问题

我把backgroundworker块移到了frmMain外的modITN。整个过程现在在modITN中运行,并从那里更新进度条。frmMain只是在modITN中调用sub来启动整个过程


简单

你可能仍然可以看看这里,我有同样的问题——还有更多的问题

在我看来,VB.net的表单“默认实例”是一个可怕的陷阱