【问题标题】:Cross thread exception from minimized winform app最小化的winform应用程序的跨线程异常
【发布时间】:2021-08-01 20:15:24
【问题描述】:

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

【问题讨论】:

标签: c# multithreading winforms


【解决方案1】:

除非设置了SynchronizingObject,否则会在后台线程上引发事件,并且不允许后台线程更新 UI。除非最小化应用程序,否则我不确定它为什么会起作用,但一个好的开始是确保您使用正确的同步以避免此类问题。

如果您想更新 UI,您应该将 SynchronizingObject 设置为 UI 中的控件之一,或者手动安排 UI 线程的任何 UI 更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多