Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.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
Vb.net 如何使用几个sub来拆分代码过程_Vb.net - Fatal编程技术网

Vb.net 如何使用几个sub来拆分代码过程

Vb.net 如何使用几个sub来拆分代码过程,vb.net,Vb.net,我正在创建一个下载程序,将它分步骤减半,这样每个部分都能正常工作 该守则分为: public class Form1 Public Shared link As String 'I'm sharing data with another form 我在textbox的textchanged事件中插入要下载的url: If (My.Settings.Cartellasalvataggio = "") Then Label2.Text = &

我正在创建一个下载程序,将它分步骤减半,这样每个部分都能正常工作

该守则分为:

    public class Form1

 Public Shared link As String 'I'm sharing data with another form
我在textbox的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
然后,在document completed事件中,我提取下载链接:

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
            
最后,下载子模块:


   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 有没有一种简单的方法可以连接这些代码片段,使它们在逻辑上一步一步地工作,而无需修改太多代码

多谢各位

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连接符号。字符串中的任何+符号都不被视为串联字符。例如,“title+”


我想如果你能开始使用插值字符串,你会发现你的代码可读性更好。

你能告诉我们是哪种方法产生标签文本吗?嗨,应该在每个私有子文件的开头更新。不像你从gif中看到的那样一次更新。看来所有的私人潜艇都被召集在一起了。我怎样才能让它们不“匆忙”地工作呢?你的代码显然只是更新了一个标签。这不是我想要的,这不是我的代码;这是你的密码。你要求解释发生了什么,我解释了。我的代码与设置标签文本有点不同。顺便说一句,我觉得很奇怪,他们在彼此之上工作。看看我的代码,不可能在Title()之后1毫秒处理Download()。我将进一步研究。@Mattia标签显示仅在UI空闲时更新。当执行
DocumentCompleted
事件处理程序中的代码或它调用的任何方法时,UI不是空闲的。因此,您可以在这些方法中更新
Label.Text
属性任意次数,但在UI再次变为空闲之前,即在
Title()
中的代码执行后,
Fileexist()
Download()
方法执行后,UI不会更新标签的显示值,控件返回到
DocumentCompleted
方法,其
End子语句将被命中。如果确实需要,可以通过调用
Label3.在设置
Label3.Text
属性后立即刷新
。但是,这无助于在代码运行时使UI响应,并阻止UI线程更新其显示或响应用户输入。您可能应该考虑使用某种线程;可能是后台工作程序、任务或可等待的异步方法。
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+ "