asp.net - VB.NET中YouTube DirectUpload的BackgroundWorker?

标签 asp.net vb.net upload youtube backgroundworker

我正在尝试将服务器上的视频直接上传到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

最佳答案

您可能需要研究Task Parallel Library,以便在代码中添加多线程。根据您提供的代码:

添加此导入语句

Imports System.Threading.Tasks

并使用以下简单语句替换所有backgroundworker逻辑:
    Dim uploadTask As Task = Task.Factory.StartNew(Sub()
                                                       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)

现在,您可以使用uploadTask在后台上传视频,并且您的UI线程将可以自由处理其他代码。如果要取消和进度报告,确实会更加复杂,但是顶部的链接应该可以帮助您入门。

关于asp.net - VB.NET中YouTube DirectUpload的BackgroundWorker?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10358747/

相关文章:

.net - HttpContext.Request 和 Request 的区别

c# - OAuth登录后获取用户ID

vb.net - 使用包含 Excel VBA 内的 DataContract 的 wcf 服务

VB.net - "Dim x as new Y()"与 "Dim x as Y = new Y()"

mysql - 来自 MySQL 的 VB.NET ComboBox SelectedIndex

javascript - Amazon s3 Javascript-请求的资源上不存在 'Access-Control-Allow-Origin' header

c# - 使用 FireFox 在 asp.net 4.0 中进行本地化

file - Struts2上传文件,在发送文件之前验证文件大小和内容类型

php - 用php给图像加水印

c# - Ajax 刷新/更新从 GridView 列到 TextBox 的总和