Youtube C # .NET API: загрузка видео и получение событий после завершения - PullRequest
5 голосов
/ 22 июня 2011

Это код для загрузки видео на Youtube с использованием C # .NET API из настольного приложения Windows Forms:

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);

... но их никогда не увольняют при загрузке. Кроме того, я не могу найти никакой документации по API .NET, которая идет намного дальше, чем приведенный выше пример загрузки небольшого видео. Итак: это неправильные события, чтобы искать? Просто для справки, я начинаю, казалось бы, синхронную загрузку следующего кода в фоновом потоке:

            ThreadPool.QueueUserWorkItem(
            delegate
                {
                    try
                    {
                        createdVideo = request.Upload(newVideo);
                    } catch (Exception ex){
                      Invoke((ThreadStart) delegate{uploadingFailedWithException(ex);});
                    }
                });
            Invoke((ThreadStart)readyUploading);

Таким образом, я знаю, когда синхронная операция завершилась, но я бы хотел, чтобы события обновлялись для пользователя. Есть идеи?

1 Ответ

4 голосов
/ 02 августа 2011

Используемый вами метод загрузки является синхронным, и поэтому выполнение вашей программы остановится на этой строке кода и продолжится только после завершения загрузки.

То, что вы пытаетесь сделать, требует асинхронной загрузки. Полный пример, показывающий, как использовать компонент ResumableUploader и события AsyncOperationCompleted / AsyncOperationProgress, включен в клиентскую библиотеку .NET и доступен в http://code.google.com/p/google-gdata/source/browse/#svn%2Ftrunk%2Fclients%2Fcs%2Fsamples%2FYouTubeUploader%2FYouTubeUploader

...