2

我正在使用 VS express 2010 和 .Net 4.0。

我将 DataGridView 绑定到实现 INotifyPropertyChanged 的​​ BindingList。

更改的值通常反映在网格上,但在使用 Threading.Timers 执行更新作业时失败。

如下所示,除非单元格失去焦点,例如“最小化和最大化”或“网格被其他窗口覆盖”或“选择单元格”,否则该值会更新但不会显示。

http://i.minus.com/jViIpKKeNNRrB.PNG

我是新手。我已经搜索过,我相信 threading.timer 在更新 UI 方面很糟糕。但就我而言,我只是在更新值。

我厌倦了玩弱 threading.timer。任何其他轻量级计时器的建议将不胜感激!谢谢你。

4

1 回答 1

2

Threading.Timer更新 UI 方面并不“坏”,它只是在与 UI 线程不同的线程上触发其事件,并且由于 UI 必须在 UI 线程上更新,因此您遇到了困难。

您需要Invoke在 UI 线程上进行更新。

最简单的方法是:

myControl.Invoke((Action)(() =>
{
    myControl.Text = "Hello";
}));

显然将您的代码替换为我的示例。

让我知道这个是否奏效。

于 2012-10-23T03:40:41.387 回答