在我的高度并行化的 C# winforms 软件 (CheckForIllegalCrossThreadCalls) 中重新激活非法跨线程调用检查后,我得到了大量关于这些不安全调用的调试异常。
例如像这样的行:
flowLayoutPanel1.Controls.Clear();
抛出异常。
为了“修复”那些我只是从创建/拥有 flowlayoutpanel 的类实例中调用的衬里,如下所示:
ownerClassInstance.Invoke((MethodInvoker)delegate { flowLayoutPanel1.Controls.Clear(); });
现在我有以下问题
1)我不能只使用 CheckForIllegalCrossThreadCalls 并停止担心吗?由于线程不安全的操作,我没有遇到任何问题。老实说,我什至不知道任何真实世界的例子,线程不安全的winforms编程会导致不可预测的行为。我只是害怕我以后会偶然发现真正的问题,并从一开始就尽量保持清洁。
2) 通过调用强制转换委托(lambda?)来“包装”行是否会花费很多性能?就像我将 1000 个对象添加到 flowlayoutpanel 一样,如果按照我的方式将这些 add 方法调用设为线程安全,它是否会明显变慢?