为啥我的 .Net/WinForms 应用程序仅在 Visual Studio 中获得跨线程异常? [复制]

Posted

技术标签:

【中文标题】为啥我的 .Net/WinForms 应用程序仅在 Visual Studio 中获得跨线程异常? [复制]【英文标题】:Why my .Net/WinForms application getting Cross Thread exceptions only in Visual Studio? [duplicate]为什么我的 .Net/WinForms 应用程序仅在 Visual Studio 中获得跨线程异常? [复制] 【发布时间】:2022-01-19 18:24:27 【问题描述】:

我继承了旧版 Winforms/C# 应用程序。 该应用程序使用分布在多个选项卡上的几个不同的网格。 为了加快加载时间/查询性能,获取数据到 数据源是通过衍生线程异步完成的。

在 Visual Studio 2019 中运行应用程序时,我得到了几个跨线程 设置/重置数据源时系统触发事件时出现异常。这些 事件当然会触发不在主 UI 线程上的事件。

我只在 Visual Studio 中调试时看到这些异常。我知道多年 过去这样做是一个坏主意/设计,每当我们遇到实例时,我们 将使用 Invoke()/BeginInvoke() 包装访问。

鉴于在 Visual Studio 之外运行应用程序时这些异常会被“吃掉”, 现在还是这样吗? .. 还是被认为是良性/安全的例外?

【问题讨论】:

我遇到过类似的情况,在 Visual Studio 中显示跨线程错误,但在可执行文件中运行良好(大部分时间)。在某些情况下,应用程序会由于跨线程异常而崩溃,但这种情况很少见。解决方案当然是调用 UI 调用。因此,即使它看起来运行良好,您也会在运行时打开这些异常的大门。 【参考方案1】:

我只在 Visual Studio 中调试时看到这些异常。

因为CheckForIllegalCrossThreadCalls 默认为Debugger.IsAttached

Source Code link

我知道在过去的几年里这样做是一个糟糕的想法/设计,每当我们遇到实例时,我们都会使用 Invoke()/BeginInvoke() 包装访问

您仍然应该这样做,或者想办法将更新控件的工作编组到创建控件的线程上

鉴于在 Visual Studio 之外运行应用程序时这些异常会被“吃掉”,现在仍然如此吗?

现在还是这样;解决这些问题

或者它被认为是良性/安全的异常?

我不记得曾经遇到过任何人认为这是..

【讨论】:

以上是关于为啥我的 .Net/WinForms 应用程序仅在 Visual Studio 中获得跨线程异常? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 iOS 应用程序仅在首次运行时正确检测到当前语言?

.NET Winforms BindingNavigator 添加和删除按钮不起作用

如何使用 UIAutomation 在 .NET 4.8 WinForms 应用程序中获取所有 ComboBox ListItem 值?

我对这个 C# .NET WinForms 应用程序做错了啥?

为啥我得到一个仅在程序运行时偶尔出现的 NPE?

为啥我的代码仅在 Safari 桌面上运行缓慢?