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