将vb转换为c#时,vb中的代码块应该放入循环中?

时间:2016-06-09 09:09:42

标签: c# vb.net

这是vb中的代码:

循环直到

Loop Until prcFFMPEG.HasExited And strFFOUT = Nothing Or strFFOUT = ""

    If ProgressBar1.Value <> ProgressBar1.Maximum Then
        ProgressBar1.Value = ProgressBar1.Maximum   'make the progressbar hit its maximum 
                        'on completion
    End If

    MsgBox("The Conversion Process has Completed.", _
        MsgBoxStyle.Information, "Finished.")   'display on completion

    Button5.Enabled = False     'Disable the cancel button
    Button3.Enabled = True      'Reenable the convert button
    ProgressBar1.Value = 0      'reset the progressbar value to 0
    Label11.Text = _ProgressBar1.Value & "%"     'get the progressbar value 
                        'and report it as percent for visual purposes

    Label12.Text = "Current Encoded Frame: "
    If Me.Height = 508 Then     'if the show detailed information button 
                    'was pressed reset the form height back to normal
        Me.Height = 441
        RichTextBox1.Visible = False    'Disable the richtextbox
    End If

所以我将循环转换为c#,如下所示: 如果转换为c#是正确的,那么我应该在循环中放入代码的哪一部分?

 while(prcFFMPEG.HasExited && strFFOUT == "")
                {

                }

只有两行(我会稍后将这些行转换为c#)

 If ProgressBar1.Value <> ProgressBar1.Maximum Then
            ProgressBar1.Value = ProgressBar1.Maximum

或者所有要放入循环的代码?

这是循环所在的vb中的原始方法:

Private Sub Convert()   ' function Convert() here is the actuall conversion process

        Control.CheckForIllegalCrossThreadCalls = False   'Check for illegal cross threads      
        ''''''''''''''''
        'set presets here 'Note Combobox indexes start at 0 not 1  
        'mobile Devices
        If ComboBox1.SelectedIndex = 3 Then ' 480x320 option

            strFFCMD = " -i " & Chr(34) & InputFile & Chr(34) & " -c:v libx264 -s 480x320 -pix_fmt yuv420p -qp 23 -profile high444 -c:a libvo_aacenc -b:a 128k -ar 44100 -ac 2 " & OutputFile
        End If
        If ComboBox1.SelectedIndex = 4 Then ' 640x480 option
            strFFCMD = " -i " & Chr(34) & InputFile & Chr(34) & " -c:v libx264 -s 640x480 -pix_fmt yuv420p -qp 22 -profile high444 -c:a libvo_aacenc -b:a 128k -ar 44100 -ac 2 " & OutputFile
        End If
        If ComboBox1.SelectedIndex = 5 Then ' 800x600 option
            strFFCMD = " -i " & Chr(34) & InputFile & Chr(34) & " -c:v libx264 -s 800x600 -pix_fmt yuv420p -qp 21 -profile high444 -c:a libvo_aacenc -b:a 128k -ar 44100 -ac 2 " & OutputFile
        End If
        If ComboBox1.SelectedIndex = 6 Then ' 1024x768 option
            strFFCMD = " -i " & Chr(34) & InputFile & Chr(34) & " -c:v libx264 -s 1024x768 -pix_fmt yuv420p -qp 20 -profile high444 -c:a libvo_aacenc -b:a 128k -ar 44100 -ac 2 " & OutputFile
        End If
        If ComboBox1.SelectedIndex = 7 Then ' 1280x720 option
            strFFCMD = " -i " & Chr(34) & InputFile & Chr(34) & " -c:v libx264 -s 1280x720 -pix_fmt yuv420p -qp 19 -profile high444 -c:a libvo_aacenc -b:a 128k -ar 44100 -ac 2 -y " & OutputFile
        End If
        If ComboBox1.SelectedIndex = 8 Then ' 1920x1080 option
            strFFCMD = " -i " & Chr(34) & InputFile & Chr(34) & " -c:v libx264 -s 1920x1080 -pix_fmt yuv420p -qp 18 -profile high444 -c:a libvo_aacenc -b:a 128k -ar 44100 -ac 2 -y " & OutputFile
        End If
        ''''''''''''''
        If ComboBox1.SelectedIndex = 12 Then ' Ps3 720p option
            strFFCMD = " -i " & Chr(34) & InputFile & Chr(34) & " -c:v libx264 -s 1280x720 -pix_fmt yuv420p -qp 18 -profile high444 -c:a libvo_aacenc -b:a 128k -ar 44100 -ac 2 -y " & OutputFile
        End If
        If ComboBox1.SelectedIndex = 13 Then ' ps3 1080p option
            strFFCMD = " -i " & Chr(34) & InputFile & Chr(34) & " -c:v libx264 -s 1920x1080 -pix_fmt yuv420p -qp 18 -profile high444 -c:a libvo_aacenc -b:a 128k -ar 44100 -ac 2 -y " & OutputFile
        End If
        ''''''''''''''
        If ComboBox1.SelectedIndex = 17 Then ' TV Standard Def 720x576p PAL AVI option
            strFFCMD = " -i " & Chr(34) & InputFile & Chr(34) & " -c:v mpeg4 -s 720x576 -pix_fmt yuv420p -b:v 1500k -r 30 -c:a libvo_aacenc -b:a 128k -ar 44100 -ac 2 -y " & OutputFile
        End If
        If ComboBox1.SelectedIndex = 18 Then ' TV Standard Def 720x576p PAL MP4 option
            strFFCMD = " -i " & Chr(34) & InputFile & Chr(34) & " -c:v libx264 -s 720x576 -pix_fmt yuv420p -qp 19 -profile high444 -c:a libvo_aacenc -b:a 128k -ar 44100 -ac 2 -y " & OutputFile
        End If
        ''''''''''''''
        If ComboBox1.SelectedIndex = 19 Then ' TV High Def 1280x720p PAL AVI option
            strFFCMD = " -i " & Chr(34) & InputFile & Chr(34) & " -c:v mpeg4 -s 1280x720 -pix_fmt yuv420p -b:v 2500k -r 30 -c:a libvo_aacenc -b:a 128k -ar 44100 -ac 2 -y " & OutputFile
        End If
        If ComboBox1.SelectedIndex = 20 Then ' TV High Def 1280x720p PAL MP4 option
            strFFCMD = " -i " & Chr(34) & InputFile & Chr(34) & " -c:v libx264 -s 1280x720 -pix_fmt yuv420p -qp 18 -profile high444 -c:a libvo_aacenc -b:a 128k -ar 44100 -ac 2 -y " & OutputFile
        End If
        ''''''''''''''
        If ComboBox1.SelectedIndex = 21 Then ' TV High Def 1920x1080p PAL AVI option
            strFFCMD = " -i " & Chr(34) & InputFile & Chr(34) & " -c:v mpeg4 -s 1920x1080 -pix_fmt yuv420p -b:v 3000k -r 30 -c:a libvo_aacenc -b:a 128k -ar 44100 -ac 2 -y " & OutputFile
        End If
        If ComboBox1.SelectedIndex = 22 Then ' TV High Def 1920x1080p PAL MP4 option
            strFFCMD = " -i " & Chr(34) & InputFile & Chr(34) & " -c:v libx264 -s 1920x1080 -pix_fmt yuv420p -qp 18 -profile high444 -c:a libvo_aacenc -b:a 128k -ar 44100 -ac 2 -y " & OutputFile
        End If

        '''''''''''''''''''

        If ComboBox1.SelectedIndex = 26 Then ' MKV 1 option
            strFFCMD = " -i " & Chr(34) & InputFile & Chr(34) & " -c:v libx264 -s 1280x720 -pix_fmt yuv420p -b:v 3000k -r 30 -profile high444 -c:a libvo_aacenc -b:a 128k -ar 44100 -ac 2 -y " & OutputFile
        End If
        If ComboBox1.SelectedIndex = 27 Then ' MKV 2 option
            strFFCMD = " -i " & Chr(34) & InputFile & Chr(34) & " -c:v libx264 -s 1920x1080 -pix_fmt yuv420p -b:v 4000k -r 30 -profile high444 -c:a libvo_aacenc -b:a 128k -ar 44100 -ac 2 -y " & OutputFile
        End If
        If ComboBox1.SelectedIndex = 28 Then 'SD flv option
            strFFCMD = " -i " & Chr(34) & InputFile & Chr(34) & " -c:v libx264 -s 480x320 -pix_fmt yuv420p -b:v 1000k -r 30 -profile high444 -c:a libvo_aacenc -b:a 128k -ar 44100 -ac 2 -y " & OutputFile
        End If

        ''''''''''''''''
        If ComboBox1.SelectedIndex = 30 Then 'low qual flv option
            strFFCMD = " -i " & Chr(34) & InputFile & Chr(34) & " -c:v libx264 -s 320x240 -pix_fmt yuv420p -b:v 800k -r 30 -profile high444 -c:a libvo_aacenc -b:a 96k -ar 44100 -ac 2 -y " & OutputFile
        End If
        If ComboBox1.SelectedIndex = 31 Then 'medium qual flv option
            strFFCMD = " -i " & Chr(34) & InputFile & Chr(34) & " -c:v libx264 -s 480x320 -pix_fmt yuv420p -b:v 1000k -r 30 -profile high444 -c:a libvo_aacenc -b:a 128k -ar 44100 -ac 2 -y " & OutputFile
        End If
        If ComboBox1.SelectedIndex = 32 Then 'high qual flv option
            strFFCMD = " -i " & Chr(34) & InputFile & Chr(34) & " -c:v libx264 -s 720x576 -pix_fmt yuv420p -b:v 1500k -r 30 -profile high444 -c:a libvo_aacenc -b:a 192k -ar 44100 -ac 2 -y " & OutputFile
        End If

        ''''''''''''''''
        If ComboBox1.SelectedIndex = 34 Then    '320kbs mp3 only option
            strFFCMD = " -i " & Chr(34) & InputFile & Chr(34) & " -vn -c:a libmp3lame -b:a 320k -ar 44100 -ac 2 -y " & OutputFile
        End If
        If ComboBox1.SelectedIndex = 35 Then    '192kbs mp3 only option
            strFFCMD = " -i " & Chr(34) & InputFile & Chr(34) & " -vn -c:a libmp3lame -b:a 192k -ar 44100 -ac 2 -y " & OutputFile
        End If
        If ComboBox1.SelectedIndex = 36 Then    '128kbs mp3 only option
            strFFCMD = " -i " & Chr(34) & InputFile & Chr(34) & " -vn -c:a libmp3lame -b:a 128k -ar 44100 -ac 2 -y " & OutputFile
        End If

        If ComboBox1.SelectedIndex = 38 Then   'Lossless Copy option
            strFFCMD = " -i " & Chr(34) & InputFile & Chr(34) & " -c:v libx264 -qp 0 -c:a libvo_aacenc -b:a 320k -ar 44100 -ac 2 -y " & OutputFile
        End If



        '''''''''''''''''
        'start Main Process
        psiProcInfo.FileName = Application.StartupPath + "\ffmpeg.exe"  'Location Of FFMPEG.EXE
        psiProcInfo.Arguments = strFFCMD                                'start ffmpeg with command strFFCMD string
        psiProcInfo.UseShellExecute = False                             'use the shell execute command we always want no
        psiProcInfo.WindowStyle = ProcessWindowStyle.Hidden             'hide the ffmpeg process window
        psiProcInfo.RedirectStandardError = True                        'Redirect the error out so we can read it
        psiProcInfo.RedirectStandardOutput = True                       'Redirect the standard out so we can read it
        psiProcInfo.CreateNoWindow = True                               'We dont create the ffmpeg window
        prcFFMPEG.StartInfo = psiProcInfo                               'ffmpeg process start information = all above informaton
        prcFFMPEG.Start() 'Start Process

        ffReader = prcFFMPEG.StandardError 'Enable Error Checking For FFMPEG.EXE


        Do       '' Bgw1 = Backgroundworker1
            If Bgw1.CancellationPending Then ' Have we pressed Cancel?
                Exit Sub

            End If

            Button5.Enabled = True      'Enable the cancel button
            Button3.Enabled = False     'Disable the convert button

            strFFOUT = ffReader.ReadLine        ' read each line from ffreader
            RichTextBox1.Text = strFFOUT        'Show each read line in the richtextbox

            'Get the progress from the current encoded frame
            If strFFOUT.Contains("frame=") Then         'if the strFFOut contains the string
                currentFramestr = Mid(strFFOUT, 7, 6)   'grab the next part after the string 'frame='
                currentFrameInt = CInt(currentFramestr) 'the next part is a string so convert the numbers back to an integer
            End If

            'Calculate the percentage of the progressbar
            Dim percentage As String = CType((ProgressBar1.Value / ProgressBar1.Maximum * 100), Integer).ToString & "%"

            ' report progress
            ProgressBar1.Maximum = FCount + 1000    'MediaInfo does not always get a accurate frame count so always add 1000 on top
            ProgressBar1.Value = (currentFrameInt)  'the current value is the current encoded frame
            Label12.Text = "Current Encoded Frame: " & currentFrameInt          'show the current frame in a label
            Label11.Text = percentage               'show the perecentage in a label
            'Label12.Text = ProgressBar1.Maximum 'for testing purposes


            ' Loop untill done
        Loop Until prcFFMPEG.HasExited And strFFOUT = Nothing Or strFFOUT = ""

        If ProgressBar1.Value <> ProgressBar1.Maximum Then
            ProgressBar1.Value = ProgressBar1.Maximum  'make the progressbar get to it's maximum on completion
        End If


        MsgBox("The Conversion Process has Completed.", MsgBoxStyle.Information, "Finished.")   'display on completion
        Button5.Enabled = False     'Disable the cancel button
        Button3.Enabled = True      'Reenable the convert button
        ProgressBar1.Value = 0      'reset the progressbar value to 0
        Label11.Text = ProgressBar1.Value & "%"     'get the progressbar value and report it as percent for visual purposes
        Label12.Text = "Current Encoded Frame: "
        If Me.Height = 508 Then     'if the show detailed information button was pressed reset the form height back to normal
            Me.Height = 441
            RichTextBox1.Visible = False    'Disable the richtextbox
        End If

    End Sub

在底部,您可以看到以下行:

Loop Until prcFFMPEG.HasExited And strFFOUT = Nothing Or strFFOUT = ""

但是不清楚循环的开始和结束位置。

2 个答案:

答案 0 :(得分:3)

...
ffReader = prcFFMPEG.StandardError 'Enable Error Checking For FFMPEG.EXE


**Do**       '' Bgw1 = Backgroundworker1
    If Bgw1.CancellationPending Then ' Have we pressed Cancel?
        Exit Sub

    End If
...

执行是开始。 循环直到结束。

答案 1 :(得分:2)

这是你在C#中的循环。在VB中,它以Do开头,以Loop Until [Condition]结束。

do { //' Bgw1 = Backgroundworker1
    // Have we pressed Cancel?
    if (Bgw1.CancellationPending) {
        return;
    }

    //Enable the cancel button
    Button5.Enabled = true;
    //Disable the convert button
    Button3.Enabled = false;

    // read each line from ffreader
    strFFOUT = ffReader.ReadLine();
    //Show each read line in the richtextbox
    RichTextBox1.Text = strFFOUT;

    //Get the progress from the current encoded frame
    //if the strFFOut contains the string
    if (strFFOUT.Contains("frame=")) {
        //grab the next part after the string 'frame='
        currentFramestr = String.Mid(strFFOUT, 7, 6);
        //the next part is a string so convert the numbers back to an integer
        currentFrameInt = Convert.ToInt32(currentFramestr);
    }

    //Calculate the percentage of the progressbar
    string percentage = Convert.ToInt32((ProgressBar1.Value / ProgressBar1.Maximum * 100)).ToString + "%";

    // report progress
    //MediaInfo does not always get a accurate frame count so always add 1000 on top
    ProgressBar1.Maximum = FCount + 1000;
    //the current value is the current encoded frame
    ProgressBar1.Value = (currentFrameInt);
    //show the current frame in a label
    Label12.Text = "Current Encoded Frame: " + currentFrameInt;
    //show the perecentage in a label
    Label11.Text = percentage;
    //Label12.Text = ProgressBar1.Maximum 'for testing purposes

    // Loop until done
} while (!(prcFFMPEG.HasExited || string.IsNullOrEmpty(strFFOUT)));