Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
BackGroundWorker未能更新RichTextBox(独立类)VB.NET_Vb.net - Fatal编程技术网

BackGroundWorker未能更新RichTextBox(独立类)VB.NET

BackGroundWorker未能更新RichTextBox(独立类)VB.NET,vb.net,Vb.net,我开发了一个应用程序,我将它分解为“更简单”的术语,只是为了解释我遇到的问题 该应用程序有一个具有DoWork、Completed和ProgressChanged方法的BackGroundWorker。它位于“Main”类中,然后我有一个“ScheduledSend”类,该类包含带有TimedEvent处理程序的代码,以便当Time=X时,它为BGW执行RunWorkerASync 这是因为我通过强制按下按钮或超时“计划”执行来处理应用程序 然后在“Main”窗体上有一个RichTextBox,

我开发了一个应用程序,我将它分解为“更简单”的术语,只是为了解释我遇到的问题

该应用程序有一个具有DoWork、Completed和ProgressChanged方法的BackGroundWorker。它位于“Main”类中,然后我有一个“ScheduledSend”类,该类包含带有TimedEvent处理程序的代码,以便当Time=X时,它为BGW执行RunWorkerASync

这是因为我通过强制按下按钮或超时“计划”执行来处理应用程序

然后在“Main”窗体上有一个RichTextBox,用于在进程运行时显示日志信息

问题 当应用程序使用强制按钮运行时,rich textbox日志会正确更新,但是当它使用计划发送运行时,它根本不会更新,请有人向我解释为什么会出现这种情况

我在下面用“更简单”的术语详细描述了代码

Public Class Main

'Timer Variables
Private Shared aTimer As System.Timers.Timer
Private Shared aTimerTime As Integer

Private Sub Main_Load(sender As Object, e As EventArgs) Handles Me.Load

'Setup the Scheduled Send Timers
        aTimerTime = (1000)

        aTimer = New System.Timers.Timer(aTimerTime) '1000 = 1 second, 60000 = 1 minute

        AddHandler aTimer.Elapsed, AddressOf ScheduledSend.OnTimedEvent

        aTimer.Enabled = True



End Sub

Private Sub SendManFileBtn_Click(sender As Object, e As EventArgs) Handles SendManFileBtn.Click

    Try

        LogFileRTB.Text = ""

        TSProgBar.MarqueeAnimationSpeed = 100

        BGW1BuildXML.RunWorkerAsync()

    Catch ex As Exception
        ErrorLogging.ReportError(ex)
    End Try


 End Sub

 Private Sub BGW1BuildXML_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles BGW1BuildXML.ProgressChanged
    Try

        LogFileRTB.AppendText(DateTime.Now.ToLongTimeString & "     " & e.UserState.ToString & Environment.NewLine)

    Catch ex As Exception
        ErrorLogging.ReportError(ex)
    End Try

 End Sub

 End Class

Public Class ScheduledSend

Public Shared Sub OnTimedEvent(ByVal source As Object, ByVal e As ElapsedEventArgs)

    Try

        Console.WriteLine(e.SignalTime.ToLongTimeString)
        Console.WriteLine(My.Settings.schTimer.ToLongTimeString)

        If e.SignalTime.ToLongTimeString = My.Settings.schTimer.ToLongTimeString Then
            Console.WriteLine("Scheduled Timer Activated...")
            Main.BGW1BuildXML.ReportProgress(0, "Scheduled Timer Activated...")
            Main.BGW1BuildXML.RunWorkerAsync()
        End If

    Catch ex As Exception
        ErrorLogging.ReportError(ex)
    End Try

End Sub

End Class
因此,我添加了主表单加载,这是它设置计时器的地方,Btn点击“强制”正确使用BGWReportProgress的进程,并通过ReportProgress方法更新RichTextBox

然后,“ScheduledSend”类有一个“Timed”方法,当2个变量的时间与它启动的时间相匹配时,它不会正确更新RichTextBox,如下所示:

Main.BGW1BuildXML.ReportProgress(0, "Scheduled Timer Activated...")
将RichTextbox留空


任何帮助都将不胜感激。

这似乎是该功能的一个逆火。ScheduledSend类如何知道哪个主窗体实例包含要更新的RichTextBox?@Steve在“ProgressChanged”中,我实际上只是用LogFileRTB.AppendText(DateTime.Now.ToLongTimeString&“”&e.UserState.ToString&Environment.NewLine)引用RichTextBox我知道,但您似乎是从默认表单实例调用它,而不是从实际的主实例调用它。我会尝试将公共共享属性添加到与主窗体类型相同的ScheduleSend类中。然后,在Main_Load中,将属性设置为OnTimedEvent中的当前实例(Me),在调用ReportProgress时使用该属性。OnTimedEvent()方法在工作线程上运行。它会创建一个主类的新实例,BGW会更新该实例。不是你正在看的那个。忘记使用可怕的默认实例功能确实需要进行大脑移植,但目前很难进行。使用System.Timers.Timer没有任何意义,通过使用常规Winforms计时器及其勾号事件来实现。因此,我是否需要“取消学习”默认实例功能以使其正常工作,或者将System.Timers.Timer更改为常规Winforms计时器并勾号事件来解决问题?为各位的建议干杯。