自定义事件问题

ElektroStudios

我创建了一个类,在其中运行新进程(CLI外部应用程序),该应用程序具有自己的进度条,因此我从隐藏的进程控制台中选择进度,以计算该类中控制台外部的百分比。

好吧,我想做的是在Class中创建一个事件(或其他事情,这只是我认为有用的第一个事件),以返回包含进度百分比(该百分比是从0到0的Integer的Integer)的Integer数字。 99)

我已经读过有关如何创建自定义事件的信息,但是我迷失了尝试方法,我不知道如何从其他类中检索该类之外的整数(变量Percentage)来处理它,例如,我运行了一个方法因此,我想处理默认“ Form1”类中的流程百分比进度。

这是我自定义类的代码:

Public Class CoreConverter

Public Shared Effects As String = String.Empty ' DSP Effects

' <summary>
' Gets or sets the CoreConverter executable path.
' </summary>
Public Shared CoreConverter_Location As String = ".\CoreConverter.exe"
Public Shared CoreConverter As New Process()

Public Shared CoreConverter_Info As New ProcessStartInfo() With { _
              .CreateNoWindow = True, _
              .UseShellExecute = False, _
              .RedirectStandardOutput = True, _
              .RedirectStandardError = True _
}

Public Shared Event Progress As EventHandler

Protected Sub OnProgress()
    RaiseEvent Progress(Me, EventArgs.Empty)
End Sub

Public Shared Sub Run_CoreConverter()

    CoreConverter_Info.FileName = CoreConverter_Location
    CoreConverter_Info.StandardErrorEncoding = System.Text.Encoding.Unicode
    CoreConverter_Info.StandardOutputEncoding = System.Text.Encoding.Unicode
    CoreConverter.StartInfo = CoreConverter_Info
    CoreConverter.Start()

    Dim Percentage As Integer = 0

    While Not CoreConverter.HasExited

        If ChrW(CoreConverter.StandardOutput.Read) = "*" Then
            Percentage += 1
            RaiseEvent Progress(Nothing, EventArgs.Empty)
        End If

    End While

   ' MsgBox("end")

End Sub

End Class

这是Form1类的代码

Public Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Shown
    AddHandler CoreConverter.Progress, AddressOf Process_Progress
    CoreConverter.Run_CoreConverter(Arguments, blah blah blah)
End Sub

Protected Sub Process_Progress(sender As Object, e As EventArgs)
    ' MsgBox(e.ToString) ' I want to obtain the Integer percentage but don't know how to
End Sub

请注意,我需要使用Addhandler来处理Progress事件,但实际上我想以其他方式来处理它,但是我做不到,而且我也不知道为什么:

Public Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Shown
    CoreConverter.Run_CoreConverter(Arguments, blah blah blah)
End Sub

Protected Sub Process_Progress(sender As Object, e As EventArgs) _
Handles CoreConverter.Progress
    ' MsgBox(e.ToString) ' I want to obtain the Integer percentage but don't know how to
End Sub

那么,我可以做些什么来解决这两个问题呢?

更新:

尝试使用@varocarbas解决方案解决它...

CoreConverter类:

Public Shared WithEvents p_progressBar As ProgressBar

Public Shared Sub Run_CoreConverter()

    p_progressBar = New ProgressBar() With {.Maximum = 60}

    CoreConverter_Info.FileName = CoreConverter_Location
    CoreConverter.StartInfo = CoreConverter_Info
    CoreConverter.Start()

    While Not CoreConverter.HasExited

        If ChrW(CoreConverter.StandardOutput.Read) = "*" Then
            p_progressBar.PerformStep()
        End If

    End While

    p_progressBar.Dispose()
    CoreConverter.Close

End Sub

Form1类别:

Public Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown

    ' Exception: p_progressBar is not an event (of course, I know)
    AddHandler CoreConverter.p_progressBar, AddressOf Process_Progress

    CoreConverter.Run_CoreConverter(arguments, blah blah blah)

End Sub

Sub Process_Progress(sender As Object, e As EventArgs) ' Handles Coreconverter.p_progressBar obviouslly I can't do this... :(
    MsgBox(sender.value)
End Sub
ElektroStudios

最后,我通过按照此处标记为答案的步骤解决了此问题:处理另一个类中的事件

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章