-1

YoutubeExtractor の dll を使用しています。videoDownloader_ProgressChanged および videoDownloader_DownloadFinished イベントはコンソール アプリケーションでは機能していますが、winform では機能しません。

    private void btnStart_Click(object sender, EventArgs e)
    {


         string link = textBox1.Text;
         start(link);

    }

    static void start(string link)
    {
        IEnumerable<VideoInfo> videoInfos = DownloadUrlResolver.GetDownloadUrls(link);

        DownloadVideo(videoInfos);
    }

    private static void DownloadVideo(IEnumerable<VideoInfo> videoInfos)
    {
        VideoInfo video = videoInfos
            .First(info => info.VideoFormat == VideoFormat.Standard360);

        var videoDownloader = new VideoDownloader(video, Path.Combine("C:/Downloads", video.Title + video.VideoExtension));
        videoDownloader.DownloadFinished += new EventHandler(videoDownloader_DownloadFinished);

        videoDownloader.ProgressChanged += new EventHandler<ProgressEventArgs>(videoDownloader_ProgressChanged);
        videoDownloader.Execute();
    }

    static void videoDownloader_ProgressChanged(object sender, ProgressEventArgs e)
    {
                   //some code..
    }

    static void videoDownloader_DownloadFinished(object sender, EventArgs e)
    {
        //some code..

    }

私の 2 番目の質問は、静的な videoDownloader_ProgressChanged イベントでフォーム コントロールにアクセスしたいということです。e.ProgressPercentage パラメーターは、ダウンロードされたビデオの割合を示します。ラベルに表示したい。しかし、静的イベントのためにラベルにアクセスできません..デリゲートを使用しようとしましたが、何も変わりません..

4

2 に答える 2

0

変更済み/終了済みのハンドラーで「videoDownloader.Execute()」と BeginInvoke() をスレッド化します。

GUI イベント ハンドラーで (コンピューター用語で) 時間がかかるメソッドを呼び出さないでください。約 50ms 以上かかる場合は、スレッドを外してください。あらゆるネットのもの、例えば。「YouTube」が含まれているものは、接続を確立するだけでそれよりも時間がかかります!

于 2012-05-02T12:23:17.780 に答える
0

Start() ルーチンと DownloadVideo() ルーチンの両方をインスタンス メソッドに変更してください。それらとイベント ハンドラーからも「static」キーワードを削除します。

于 2012-05-02T12:58:02.897 に答える