Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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# 最小化winform应用程序的跨线程异常_C#_Multithreading_Winforms - Fatal编程技术网

C# 最小化winform应用程序的跨线程异常

C# 最小化winform应用程序的跨线程异常,c#,multithreading,winforms,C#,Multithreading,Winforms,我有一个FileSystemWatcher,它正在等待文件出现在文件夹中,然后触发对ObservableCollection的插入。当窗体在屏幕上打开时,更新将成功进行。但是当表单最小化时,我会得到一个跨线程异常?我知道我可以检查上下文,但我想知道为什么会发生这种行为,这样我就可以确保它不会在其他地方再次出现 我在一个新的空白winform应用程序中尝试过这一点,无论是否最小化,它都会出现100%的错误,因此我不确定我做错了什么,也不确定如何诊断问题。主应用程序有数千行,有许多自定义库,所以我不

我有一个FileSystemWatcher,它正在等待文件出现在文件夹中,然后触发对ObservableCollection的插入。当窗体在屏幕上打开时,更新将成功进行。但是当表单最小化时,我会得到一个跨线程异常?我知道我可以检查上下文,但我想知道为什么会发生这种行为,这样我就可以确保它不会在其他地方再次出现

我在一个新的空白winform应用程序中尝试过这一点,无论是否最小化,它都会出现100%的错误,因此我不确定我做错了什么,也不确定如何诊断问题。主应用程序有数千行,有许多自定义库,所以我不能在这里发布所有内容

观察者呼叫

    private void CheckForFiles(object source, FileSystemEventArgs e)
    {
        WaitingFiles.Add(e.FullPath);
    }
这是什么触发的

    private async void WaitingFiles_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        CurrentProcessStatusLabel.Text = "Checking download for despatch file";
    }
当我最小化窗口时,我运行以下代码

Hide();
SysTrayIcon.Visible = true;
除非设置了,否则将在后台线程上引发事件,并且不允许后台线程更新UI。除非应用程序最小化,否则我不确定它为什么会工作,但一个好的开始是确保您使用正确的同步来避免类似的问题

如果要更新UI,应将SynchronizingObject设置为UI中的一个控件,或手动将任何UI更新计划到UI线程。

请共享一个。