0

新しいプロセス (CLI 外部アプリケーション) を実行するクラスを作成しました。そのアプリケーションには独自のプログレスバーがあるため、非表示のプロセス コンソールから進行状況を選択して、クラスのコンソール外のパーセンテージを計算します。

さて、私がやりたいことは、クラスでイベント(または何か他のもの、イベントは私が有用だと思った最初のものです)を作成して、進行状況のパーセンテージを含む整数値を返すことです(パーセンテージは0から99)

カスタムイベントの作成方法について読んだことがありますが、それを試すのに非常に迷っています。クラス外の整数(変数パーセンテージ)を取得して他のクラスから処理する方法がわかりません。たとえば、メソッドを実行します私のクラスから、デフォルトの「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

Progress イベントを処理するために Addhandler を使用する必要があることに注意してください。実際には、このように他の方法で処理したいのですが、それができず、理由もわかりません。

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
4

1 に答える 1

0

最後に、ここでマークされた回答の手順に従ってこれを解決しました:別のクラスでイベントを処理する

于 2013-10-08T05:55:49.277 に答える