vb.net - 如何使用少数 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 示例 ,是否有一种简单的方法可以连接这些代码片段,使它们在不修改太多代码的情况下逐步合乎逻辑地工作?
谢谢
解决方案
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 连接符号。字符串中的任何 + 号都不会被视为连接字符。例如“标题+”。
如果您可以开始使用插值字符串,我认为您会发现您的代码更具可读性。
推荐阅读
- c# - 没有这样的表错误或文件不是数据库
- java - Rabbit MQ + Spring Boot:重新发送损坏消息之间的延迟
- docker - 自动化 docker swarm 配置轮换
- html - 如何将值从 HTML 发送到另一个 HTML 文档并重定向到它?
- javascript - Django Javascript 附加选项
- mysql - MySQL:如何使用 unix 时间转换将同一表的列复制到另一列
- c++ - 我怎样才能找到数组指针的长度?
- nlp - 语言解释工具(LIT)zsh:非法硬件指令 python -m lit_nlp.examples.glue_demo
- android - 如何在 react-native 中添加 ios 或 android 平台特定的选择字段
- php - cron 作业脚本可以从浏览器工作,但不能从调度程序工作。?