我在使用WebClient.DownloadFileAsync
製作YouTube下載器時遇到問題,並使用它。無法在C#中的DownloadFileAsync之後執行下一個代碼?
WebClient client = new WebClient();
Process.Text("", "Downloading video data...", "new");
client.DownloadFileAsync(new Uri(this.VidLink), this.path + "\\tempVid"); // Line3
Process.Text("", "Downloading audio data...", "old");
client.DownloadFileAsync(new Uri(this.AudLink), this.path + "\\tempAud"); // Line5
FFMpegConverter merge = new FFMpegConverter();
merge.Invoke(String.Format("-i \"{0}\\tempVid\" -i \"{1}\\tempAud\" -c copy \"{2}{3}\"", this.path, this.path, dir, filename)); // Line8
merge.Stop();
Process.Text("", "Video merging complete", "new");
Process
是另一個類我使用,它工作得很好,所以從來不介意這件事。但是我遇到問題的地方是在執行第3行之後。第3行和第4行執行得非常好,第5行不會執行。當我使用DownloadFile
而不是DownloadFileAsync
時,代碼工作得很好,所以this.AudLink
沒有問題。當我刪除第3行時,第5行也很好。
同樣,當我刪除第3行和第5行非常好時,第8行將不會執行。那麼這個代碼有什麼問題?我應該殺死client
或其他什麼?
++)我不打算在下載視頻數據時使用youtube-dl
,所以請不要告訴我使用youtube-dl。
你應該'await'ing你的異步調用,或使用其他一些方法,以確定他們完成時。 – Jamiec
@Jamiec我想知道相同的..如果代碼片段不完整或不正確..或者所有的等待方法可以調用.Result,但我不會建議。 – rmjoia
等待或嘗試使用2個不同的webClient對象,或者在不同的任務中執行它,並使用Task1。繼續與其他人一起。 – Amit