サーバー上の動画を YouTube に直接アップロードする機能を実装しようとしています。ユーザーが動画を追加すると、YouTube にコピーされます。
ユーザーが動画を追加すると、アップロード プロセスが開始されますが、これには時間がかかる場合があります。フォームは、たとえ非同期フォームであっても、そこに座ってこれが起こるのを待つべきではありません。バックグラウンドで処理されていることを信頼して、ユーザーが先に進むことができるようにする必要があります。
これを可能にするために、system.threading.backgroundworker を使用しようとしています。プロセスが開始され、Web アプリが先に進むことを願っています。そうではありません。非同期または完全なポストバックであるかどうかに関係なく、ハングしており、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