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+ "