更新数据网格而不冻结UI

时间:2017-03-25 13:21:06

标签: c# wpf datagrid

我想知道是否有办法在不冻结UI的情况下更新数据网格。

我已将数据网格绑定到列表,我不断地将记录添加到列表中,并且我想同时更新数据网格。问题是,要做到这一点,我需要每次刷新源。

我的问题是: 反正有没有直接更新数据网格并在不冻结UI的情况下显示这些更新?

示例:假设我有一个数据库,我只是为了查看数据而创建数据网格(不直接编辑数据网格)。我已经可以通过填写表单(productId,ProductName,Category,quantity ...)来添加记录,并在单击按钮时提交我需要添加数据或在数据网格中更新某个项目而不需要冻结UI并最终更新数据库(以后不一定每次都可以完成)。

所以让我重新解释一下我的问题是什么是最好的方法。

谢谢,

2 个答案:

答案 0 :(得分:0)

以下示例每10秒运行后台服务以更新GUI。您可以根据需要进行修改。通过将您的线程作为异步任务运行,您的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

**如果答案有帮助,请将答复标记为答案,如果不答复,请将其标记为

答案 1 :(得分:-1)

如果我理解得很好你可能想要使用BindingList&lt;&gt;而不是列表&lt;&gt;