2

VS Express 2010 と .Net 4.0 を使用しています。

INotifyPropertyChanged を実装する BindingList に DataGridView をバインドします。

変更された値は正常にグリッドに反映されますが、Threading.Timers を使用して更新ジョブを実行すると失敗しました。

以下に示すように、値は更新されますが、「最小化と最大化」または「グリッドが他のウィンドウで覆われている」または「セルの選択」のようにセルがフォーカスを失っていない限り表示されません。

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

私は初心者です。私は検索しましたが、threading.timer は UI の更新に悪いと思います。しかし、私の場合、値を更新しているだけです。

私は弱い threading.timer で遊ぶのにうんざりしています。軽量タイマーに関するその他の推奨事項をいただければ幸いです。ありがとうございました。

4

1 に答える 1

2

UIのThreading.Timer更新は「悪い」わけではなく、UIスレッドとは別のスレッドでイベントを発生させるだけです。UIはUIスレッドで更新する必要があるため、問題が発生します。

InvokeUIスレッドで更新する必要があります。

これを行う最も簡単な方法は次のとおりです。

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

明らかに、あなたのコードを私の例に置き換えてください。

これが機能するかどうか教えてください。

于 2012-10-23T03:40:41.387 に答える