在函数C#期间使表单可用

时间:2014-05-24 22:49:09

标签: c# .net multithreading youtube backgroundworker

我在另一个线程上运行函数时遇到问题,我尝试过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;
    }

如何在函数调用期间使表单响应?

1 个答案:

答案 0 :(得分:1)

如果你将整个函数体包裹在Task.Factory.StartNew( () => { body here });中,它应该立即返回。