C# 调用线程安全的winform操作是否是一种性能饥渴的行为?这真的有必要吗?

C# 调用线程安全的winform操作是否是一种性能饥渴的行为?这真的有必要吗?,c#,.net,winforms,visual-studio-2012,thread-safety,C#,.net,Winforms,Visual Studio 2012,Thread Safety,在我的高度并行的C winforms软件CheckForIllegalCrossThreadCalls中重新激活非法的跨线程调用检查后,我得到了大量关于这些不安全调用的调试异常 例如,以下行: flowLayoutPanel1.Controls.Clear(); 抛出异常 为了修复这些单行程序,我只需从创建/拥有flowlayoutpanel的类实例调用,如下所示: ownerClassInstance.Invoke((MethodInvoker)delegate { flowLayoutPa

在我的高度并行的C winforms软件CheckForIllegalCrossThreadCalls中重新激活非法的跨线程调用检查后,我得到了大量关于这些不安全调用的调试异常

例如,以下行:

flowLayoutPanel1.Controls.Clear();
抛出异常

为了修复这些单行程序,我只需从创建/拥有flowlayoutpanel的类实例调用,如下所示:

ownerClassInstance.Invoke((MethodInvoker)delegate { flowLayoutPanel1.Controls.Clear(); });
现在我有以下问题

我不能用CheckForIllegalCrossThreadCalls停止担心吗?由于线程不安全的操作,我没有遇到任何问题。老实说,我甚至不知道任何现实世界中线程不安全的winforms编程会导致不可预测行为的例子。我只是担心以后我会偶然发现真正的问题,并从一开始就努力保持事情的整洁


2使用这种强制转换的委托lambda的调用来包装行会花费很多性能吗??例如,如果我向flowlayoutpanel添加1000个对象,如果这些添加方法调用以我的方式进行线程安全处理,是否会显著降低速度?

No;WinForms本身不是线程安全的。您应该在每个lambda中尽可能多地运行,并且有更少的调用。我希望将对代码流的更改保持在最低限度。winform元素的每一次更改都是逻辑上应该的位置。我不想从类B中调用类A中的methodInvokers,这会使后面的人更难理解。@traubenfuchs我想您正在寻找Async/Await。