我在另一个线程上运行函数时遇到问题,我尝试过BackgroundWorked以及System.Threading方法。
如果使用其中任何一个函数,函数就无法启动,如果没有这些函数,它会冻结表单几秒钟直到工作完成。
它是一个youtube下载器,使用从youtube获取信息的lib。
我有一个VideoItem类,里面有一个数组,可以保存视频和链接的所有品质。填充需要10秒左右。
在我的主窗体中,有一个函数可以在用户按下按钮时创建一个新的VideoInfo实例
public void addURLfromClipboard()
{
string clipboardURL = Clipboard.GetText();
VideoItem _item;
if (clipboardURL.StartsWith("https://www.youtube.com/watch?v=") || clipboardURL.StartsWith("http://www.youtube.com/watch?v="))
{
DownloadUrlResolver.OnDownloadProgressChanged += DownloadUrlResolver_OnDownloadProgressChanged;
videosProcessing++;
progressbar.Enabled = true;
_item = new VideoItem(clipboardURL);
if (listYoutube.FindItemByVideo(_item) == null) listYoutube.AddItem(_item);
videosProcessing--;
if (videosProcessing == 0) progressbar.Enabled = false;
}
else return;
}
如何在函数调用期间使表单响应?
答案 0 :(得分:1)
如果你将整个函数体包裹在Task.Factory.StartNew( () => { body here });
中,它应该立即返回。