我正在使用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..
}
我的第二个问题是,我想在静态videoDownloader_ProgressChanged事件中访问表单控件。 e.ProgressPercentage参数给出了我下载视频的百分比。我想在标签中显示它。但由于静态事件我无法访问标签..我试图使用委托,但没有改变..
答案 0 :(得分:0)
在已更改/已完成的处理程序中断开'videoDownloader.Execute()'和BeginInvoke()。
不要在GUI事件处理程序中调用永远占用的方法(在计算机术语中)。如果需要超过50毫秒,请将其断开。任何净的东西,例如。其中包含“YouTube”的内容,只需建立连接就需要更长的时间!
答案 1 :(得分:0)
请将Start()和DownloadVideo()例程修改为实例方法。从他们和事件处理程序中删除'static'关键字。