0

我收到异常“System.InvalidOperationException:跨线程操作无效”我怀疑控件上的数据填充来自另一个线程而不是 UI。有什么理由吗?我看到调用或开始调用可以做一些好的结果,如果是这样,我如何在我的代码中使用它?还是我们有任何其他替代机制。以下是我得到的跟踪

                Control control = null;
                object ancestor = Parent;

我可以在哪里使用 InvokeRequired,有什么想法吗?

4

2 回答 2

0

通常,您希望使用BackgroundWorker以非阻塞方式更新 UI。

这允许您运行重复或长时间运行的后台操作,该操作可以向 UI 线程报告需要更新的详细信息。

BeginInvoke 是实现相同目的的 .NET 1.1 方式,但在很大程度上被后台工作程序所取代。

如果您使用的是 .net 4.5,您也可以使用异步选项。它们可能不是一个足够直接的替代品。

于 2012-12-11T19:10:15.417 回答
-2

只需在表单加载事件中写入即可。

CheckForIllegalCrossThreadCalls =假;

在此之后您的代码正常运行......但请记住,跨线程应该是安全的......

于 2012-12-13T11:05:10.057 回答