这是使用Windows窗体桌面应用程序中的C#.NET API将视频上传到Youtube的代码:
YouTubeRequestSettings settings = new YouTubeRequestSettings("whatwill come here ?",
"my api key",
"my youtube login email", "my youtube login password");
YouTubeRequest request = new YouTubeRequest(settings);
Video newVideo = new Video();
newVideo.Title = "test 1";
newVideo.Tags.Add(new MediaCategory("Gaming", YouTubeNameTable.CategorySchema));
newVideo.Keywords = "test 1 , test 2";
newVideo.Description = "test 3 test 4";
newVideo.YouTubeEntry.Private = false;
newVideo.Tags.Add(new MediaCategory("tag 1, tag 2",
YouTubeNameTable.DeveloperTagSchema));
newVideo.YouTubeEntry.Location = new GeoRssWhere(37, -122);
newVideo.YouTubeEntry.MediaSource = new MediaFileSource("C:\\test.avi", "video/quicktime");
Video createdVideo = request.Upload(newVideo);
这很有效。我正在寻找的是让我恢复上传进度的事件,因此我可以在进度条中显示进度。 Ich可以注册以下事件:
request.Service.AsyncOperationProgress +=
new AsyncOperationProgressEventHandler(Service_AsyncOperationProgress);
request.Service.AsyncOperationCompleted +=
new AsyncOperationCompletedEventHandler(Service_AsyncOperationCompleted);
...但他们在上传时永远不会被解雇。另外,我找不到任何关于.NET api的文档比上面的小视频上传示例更进一步。那么:这些是错误的事件吗?仅供参考,我在后台线程的以下代码中开始看似同步的上传:
ThreadPool.QueueUserWorkItem(
delegate
{
try
{
createdVideo = request.Upload(newVideo);
} catch (Exception ex){
Invoke((ThreadStart) delegate{uploadingFailedWithException(ex);});
}
});
Invoke((ThreadStart)readyUploading);
这样我就知道同步操作何时结束,但我想让用户进行更新进度更新。有什么想法吗?
答案 0 :(得分:4)
您正在使用的上传方法是同步的,因此,程序的执行将在该行代码上停止,并且仅在上载完成时继续执行。
您要做的事情需要使用异步上传。 .NET客户端库中包含一个完整的示例,说明如何使用ResumableUploader组件和AsyncOperationCompleted / AsyncOperationProgress事件,可在http://code.google.com/p/google-gdata/source/browse/#svn%2Ftrunk%2Fclients%2Fcs%2Fsamples%2FYouTubeUploader%2FYouTubeUploader
获取