【发布时间】:2015-06-29 15:57:59
【问题描述】:
我正在使用 c++/cli(也应该适用于 c#)并创建一个 winforms 程序。
我有几行代码可以在 DataGridView 中编辑数据。代码由 FileSystemWatcher 事件执行,但它可以由后台工作程序或简单线程执行。但是,它不是由 UI 线程执行的。
DGV 放置在 TabControl 的选项卡上。在包含 DGV 的选项卡具有焦点的情况下执行代码时,代码将失败并出现众所周知的预期异常“跨线程操作无效”。
但是当另一个选项卡获得焦点时,代码会顺利执行。我假设 DGV 在未显示时未更新,导致代码在这种情况下运行良好。但这意味着向消息队列发送 WM_PAINT 等消息取决于 DGV 的可见性(显示与否),如果不可见,则必须在 DGV 再次显示时发送这些消息。
这是正确的吗?
DGV显示(不显示)时,代码执行有何不同?
【问题讨论】:
-
很难给您一个确切的原因,说明您的代码在没有代码 sn-p 的情况下表现如何。是在后台工作人员中进行更新的代码还是类似的东西?
-
代码是通过FileSystemWatcher事件执行的,但基本上和后台worker或者线程执行是一样的。
标签: c# multithreading winforms c++-cli