为啥我的 .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 值?