首页 > 解决方案 > 如何使用少数 subs 来拆分代码过程

问题描述

我正在通过将下载器分步减半来创建下载器,以便每个部分都能合乎逻辑地工作。

代码分为:

    public class Form1

 Public Shared link As String 'I'm sharing data with another form

我在文本框的 textchanged 事件中插入要下载的 url:

If (My.Settings.Cartellasalvataggio = "") Then
            Label2.Text = "Download folder is missing"
            ' MsgBox("manca destinazione")
        Else
            If Clipboard.GetText.Contains("youtube") = False Then
                Label2.Text = "not a valid youtube link"
            Else
                If TextBox1.Text = Clipboard.GetText Then
                    Label2.Text = "you already use it"
                Else

                    TextBox1.Text = Clipboard.GetText
                    WebBrowser1.Navigate("https://www.320youtube.com/v8/watch?v=" +
                                _TextBox1.Text.Replace("https://www.youtube.com/watch?v=", ""))
                End If
            End If
        End If

然后,在文档完成事件中,我提取下载链接:

Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
 label3.text=label3.text+"link download"
        Dim collection As HtmlElementCollection = WebBrowser1.Document.All
        Dim a As String
        For Each element As HtmlElement In collection
            If element.TagName = "A" Then
                a = element.GetAttribute("HREF")
                If a.Length > 70 Then
                    a.ToString.Replace(" - YouTube", "")
                    link = a
                 
                    If link IsNot Nothing Then
                        Title()

                    End If
                End If
            End If
        Next
    End Sub

如果链接变量不为空,那么我激活子标题:

Private Sub Title()
        label3.text=label3.text+"title+ "
        Dim wctitolo As New WebClient()
        wctitolo.Encoding = Encoding.UTF8

        Dim source As String = wctitolo.DownloadString(TextBox1.Text.Replace(" - YouTube", ""))
        Dim title As String = Regex.Match(source, "\<title\b[^>]*\>\s*(?<Title>[\s\S]*?)\</title\>", RegexOptions.IgnoreCase).Groups("Title").Value
        Dim a As String = title.Replace(" - YouTube", "")
        Dim webdecode As String = WebUtility.HtmlDecode(a)

        My.Settings.Titolo = String.Join("-", webdecode.Split(IO.Path.GetInvalidFileNameChars))
        Label2.Text = "Getting title..- Step 3/4"
        Label1.Text = My.Settings.Titolo
        RichTextBox1.AppendText(vbLf + My.Settings.Titolo + Environment.NewLine)
        formcs.BetterListBox1.Items.Add(My.Settings.Titolo)
        My.Settings.Save()
        
        If Fileexist() Then

        Else
              If My.Settings.Titolo IsNot Nothing Then
                Download()
            End If
        End If
            

和 sub FileExists () 如果文件存在则返回 true,如果文件不存在则返回 false。如果它不存在,则按照私有子标题()中的说明,我激活私有子下载()。

Public Function Fileexist() As Boolean
        Label3.Text = Label3.Text + "Checking if file exist+ "
        Dim result As Boolean
        Dim cartella = My.Settings.Cartellasalvataggio
        Dim filedidestinazione = Directory.GetFiles(cartella,
                                            My.Settings.Titolo + ".mp3",
                                              SearchOption.AllDirectories).FirstOrDefault()
        If filedidestinazione IsNot Nothing Then
            Dim answer As String
            answer = CType(MsgBox("File exist in" + vbLf + My.Settings.Cartellasalvataggio + "\" + My.Settings.Titolo + ".mp3" + vbLf + "Would you like to open the folder?", vbYesNo), String)
            If CType(answer, Global.Microsoft.VisualBasic.MsgBoxResult) = vbYes Then
                Process.Start("explorer.exe", "/select," & filedidestinazione)
                result = True
            Else
                result = False
               answer = CType(vbNo, String)
               
                Label2.Text = "File exist"

            End If
        End If
        Return result
    End Function

最后,下载子:


   Public WithEvents mclient As New WebClient
   Private Sub mClient_DownloadProgressChanged(sender As Object, e As DownloadProgressChangedEventArgs) Handles mclient.DownloadProgressChanged

       Try
           Label4.Text = (Val(e.BytesReceived) / 1048576).ToString("0.00") & "MB Scaricati"


           Label2.Text = "Download di " + My.Settings.Titolo + " in corso.."
       Catch ex As Exception
       End Try
   End Sub
Private Sub Download()
       Label3.Text = Label3.Text + "Download+ "
       Dim filepath As String = (My.Settings.Cartellasalvataggio + "\" + Label1.Text + ".mp3")
       mclient.Encoding = Encoding.UTF8
       ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
       mclient.Headers.Add(HttpRequestHeader.UserAgent, "")

       mclient.DownloadFileAsync(New Uri(link), filepath)
   End Sub

我认为没关系,但是,看看这个 gif Gif 示例 ,是否有一种简单的方法可以连接这些代码片段,使它们在不修改太多代码的情况下逐步合乎逻辑地工作?

谢谢

标签: vb.net

解决方案


Private Sub Title()
    label3.text=label3.text & "title+ "

Public Function Fileexist() As Boolean
    Label3.Text = Label3.Text & "Checking if file exist+ "

Private Sub Download()
   Label3.Text = Label3.Text & "Download+ "

标签一个接一个地更新;它发生得如此之快,以至于你看不到它。为了向自己证明这一点,在每个方法的标签代码之后的某个位置放置一个断点,您将看到标签文本构建。顺便说一句,与号是通常的 vb 连接符号。字符串中的任何 + 号都不会被视为连接字符。例如“标题+”。

如果您可以开始使用插值字符串,我认为您会发现您的代码更具可读性。


推荐阅读