2012-01-04 10 views
2

私はデータテーブルにバインドされたウィングリストを持っています。新しい非同期スレッドを作成し、そのスレッドからデータテーブルを渡すリモートサーバー呼び出しを行います。サーバコールが完了すると、wingridは自動的にリフレッシュして変更を表示します。しかし、これはプログラムのメインのUIスレッドでは行われていないため、コントロールが表示されて大きな赤いXが表示されることがあります。Infragistics - データソースの変更時に自動的に更新されるultrawingridを無効にします。

データソースが変更されたときにwingridが自動的に更新されないようにするフラグはありますか?リモートサーバコールの前にオフにして、メインスレッドに戻ってから再度オンにしたいと思います。終了したら、その後、

Grid1.SuspendRowSynchronization() 

::私は何をしたいことはあると思い

答えて

2

ソリューションは、非同期メソッドの前に

Grid1.BeginUpdate() 

を使用することでした。このメソッドはグリッドがペイントされるのを防ぎます。その後、非同期メソッドが完了したら、

Grid1.EndUpdate() 

をUIスレッドで使用します。

+0

これは、塗装のみを防止します。グリッドやバインドされたコントロールが通知を受け取るのを防ぐ方法がないため、UIスレッド上のDataTableを常に更新するのが最良の方法です。これはバックグラウンドスレッドからコントロールを更新しているため問題が発生する可能性がありますコントロールのいくつかのメンバーはスレッドセーフです。スレッドセーフの詳細については、MSDNのコントロールのスレッドセーフティセクションを参照してください。http://msdn.microsoft.com/en-us/library/system.windows.forms.control.aspx – alhalama

+0

また、PostSharpのような無料のライブラリおそらく '[ThreadSafeMethod]'の助けを借りて? – Prokurors

0

Grid1.ResumeRowSynchronization() 
+0

これは機能しませんでした。私はデータテーブルに行を追加して更新しましたが、グリッドはまだ変更を示しました – briddums

+0

これは非常に奇妙です。 Infragisticsのドキュメント(http://help.infragistics.com/Help/NetAdvantage/WinForms/2011.2/CLR2.0/html/Infragistics2.Win.UltraWinGrid.v11.2~Infragistics.Win.UltraWinGrid.UltraGridBase~SuspendRowSynchronizationを参照してください。 html)、これは起こりません。コントロールのバグのように思えます。 –

関連する問題