2017-03-25 13 views
0

UIをフリーズせずにDataGridを更新する方法がある場合、私は驚いていました。 データグリッドをリストにバインドしました。レコードをリストに追加し続けると同時に、データグリッドを更新したいのと同時に問題を解決したいと思っています。質問があるたびにソースをリフレッシュする必要があります。 DataGridを直接更新し、それらの更新をUIをフリーズせずに表示させるには?UIをフリーズしないでDataGridを更新する

例:データを表示するためだけにデータグリッドを作成するデータベースがあるとします(データグリッドは直接編集しません)。私はフォーム(productId、ProductName、Category、quantity ...)を記入し、ボタンをクリックすると を送信してレコードを追加することが可能になりました。データを追加する必要があるか、またはデータグリッドで更新する特定のアイテムが必要です。 UIをフリーズせずにデータベースを更新する必要はありません(これは必ずしも必ずしも必ずしもそうする必要はありません)。だから私はこれを行うための最良の方法は何かを言い換えてみましょう。 おかげで、私はよく理解した場合

+0

アイテムを絶えず追加しているのであれば、 'BackgroundWorker'クラスを見てみてください。 – dcg

+2

グリッドをObservableCollectionにバインドし、重いアクションを別のスレッドで実行します。 – Nkosi

+0

はあなたの現在の状況と望ましい行動を表す[mcve]を提供します – Nkosi

答えて

-1

あなたはGUIを更新するために、例の実行バックグラウンドサービスごとに10秒の後にするBindingList <>の代わりにリストの<>

+0

これはwinformsアプリケーションではそうかもしれませんが、OPにはWPFというタグが付けられています。 – Nkosi

+0

私はちょうどWPFタグに気づいた –

0

を使用することもできます。必要に応じて変更することができます。スレッドを非同期タスクとして実行すると、GUIがハングアップすることはありません。

public frm_testform() 
{ 

    InitializeComponent(); 

    dispatcherTimer_Tick().DoNotAwait(); 

} 

private async Task dispatcherTimer_Tick() 
{ 
    DispatcherTimer timer = new DispatcherTimer(); 
    TaskCompletionSource<bool> tcs = null; 
    EventHandler tickHandler = (s, e) => tcs.TrySetResult(true); 

    timer.Interval = TimeSpan.FromSeconds(10); 
    timer.Tick += tickHandler; 
    timer.Start(); 

    while (true) 
    { 
     tcs = new TaskCompletionSource<bool>(); 

     await Task.Run(() => 
     { 
     // Run your background service and UI update here 
     await tcs.Task; 
    } 

} 

敬具、

ThiyaguあるRajendran

**そうでない場合、彼らは助け、マークを外した場合の答えとして回答をマークしてください。

関連する問題