Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使窗体在函数C期间可用#_C#_.net_Multithreading_Youtube_Backgroundworker - Fatal编程技术网

C# 使窗体在函数C期间可用#

C# 使窗体在函数C期间可用#,c#,.net,multithreading,youtube,backgroundworker,C#,.net,Multithreading,Youtube,Backgroundworker,我在另一个线程上运行函数时遇到问题,我尝试了BackgroundWorked和System.Threading方法 如果使用其中任何一个函数,函数都不会启动,如果没有这些函数,它会将表单冻结几秒钟,直到工作完成 它是一个youtube下载程序,使用从youtube获取信息的库 我有一个VideoItem类,里面有一个数组,保存视频的所有质量,并有链接。填充需要10秒左右的时间 在我的主窗体中,有一个函数可以在用户按下按钮时创建一个新的VideoInfo实例 public void add

我在另一个线程上运行函数时遇到问题,我尝试了BackgroundWorked和System.Threading方法

如果使用其中任何一个函数,函数都不会启动,如果没有这些函数,它会将表单冻结几秒钟,直到工作完成

它是一个youtube下载程序,使用从youtube获取信息的库

我有一个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;
    }

在函数调用期间,如何使窗体响应?

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

可能不是任务中的函数体,但从任务内部调用函数+1无论如何,干杯!