我試圖將我的服務器上的視頻直接上傳到YouTube。當用戶添加視頻時,它會被複制到YouTube。在VB.NET中用於YouTube DirectUpload的BackgroundWorker?
添加視頻的用戶操作應該開始上傳過程,這可能需要一段時間。這種形式,即使是異步形式,也不應該坐在那裏等待這種情況發生。它應該剛剛開始,並允許用戶繼續前進,相信它正在後臺處理。
爲了做到這一點,我試圖使用system.threading.backgroundworker。我希望這個過程能夠開始,網絡應用程序將繼續前進。不是。它正在掛起,無論是異步還是完整回發,並且在返回並更新lblmsg.text之前等待上傳完成。
是否有不同的方式我應該去做這件事,所以用戶可以啓動上傳程序,而不是等待它完成?這是我到目前爲止的代碼:
Sub up_load(s As Object, e As EventArgs)
Dim worker As BackgroundWorker = New BackgroundWorker
worker.WorkerReportsProgress = True
worker.WorkerSupportsCancellation = True
AddHandler (worker.DoWork), AddressOf begin_upload
'call this and move on?
worker.RunWorkerAsync()
lblmsg.Text = "Successfully initiated upload"
End Sub
Sub begin_upload(s As Object, e As DoWorkEventArgs)
Dim request As New YouTubeRequest(settings)
Dim vidupload As New Video()
vidupload.Title = "My Big Test Movie"
vidupload.Tags.Add(New MediaCategory("Nonprofit", YouTubeNameTable.CategorySchema))
vidupload.Keywords = "church, jesus"
vidupload.Description = "See the entire video"
vidupload.YouTubeEntry.Private = False
vidupload.YouTubeEntry.setYouTubeExtension("location", "Downers Grove, IL")
vidupload.YouTubeEntry.MediaSource = New MediaFileSource("c:\users\greg\test3.asf", "video/x-ms-wmv")
Dim createdVideo As Video = Request.Upload(vidupload)
End Sub
謝謝!這絕對是更接近一步。它在後臺啓動進程並返回,但在YouTube端數分鐘後,我收到「失敗,上傳已中止」。它會保持這個過程直到它完成,還是我不得不擔心回收或超時或什麼? – gbusman 2012-04-28 16:57:07
更新:嘗試在創建任務時使用LongRunning選項,仍然中止並在75MB文件上傳失敗。 – gbusman 2012-04-28 17:40:45
有趣...我沒有意識到任何默認超時,所以我相信YouTube的API是責備。 TPL設計時考慮到了簡單性,因此您不必擔心管理線程等問題。 – 2012-04-28 20:08:17