Threading.Timer更新的值未反映在datagridview中

时间:2012-10-23 03:10:13

标签: c# winforms datagridview timer

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

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

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

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

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

我是新手。我曾经搜索过,我相信threading.timer在更新UI时很糟糕。但就我而言,我只是更新了价值。

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

1 个答案:

答案 0 :(得分:2)

更新UI时Threading.Timer并非“坏”,它只是在与UI线程不同的线程上触发其事件,并且因为UI必须在UI线程上更新,否则您遇到了困难。

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

最简单的方法是:

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

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

让我知道这是否有效。