gpt4 book ai didi

c# - 在 WPF 中使用计时器刷新 UI(使用 BackgroundWorker?)

转载 作者:可可西里 更新时间:2023-11-01 08:30:48 24 4
gpt4 key购买 nike

我们在 WPF 中有一个应用程序,它通过 ObservableCollection 显示数据。 5分钟后,我想刷新数据。

我想我可以为它的 Elapsed 事件使用 System.Timers.Timer 对象,然后调用 BackgroundWorker 来调用开始工作。该方法在 ViewModel 类上。

但是线程好像有问题。

所以我尝试使用 Dispatcher,但还是一样。

这是我的(简化且未优化的)代码:

/// <summary>
/// Initializes a new instance of the <see cref="ApplicationController"/> class.
/// </summary>
public ApplicationController()
{
CreateDefaultTabs();

Timer timer = new Timer(20000); //20 secs for testing purpose.
timer.AutoReset = true;
timer.Enabled = true;
timer.Elapsed += new ElapsedEventHandler(OnTimeBeforeRefreshElapsed);
timer.Start();
}

private void OnTimeBeforeRefreshElapsed(object sender, ElapsedEventArgs e)
{
Dispatcher.CurrentDispatcher.Invoke(new Action(() => { RefreshData(); }));
Dispatcher.CurrentDispatcher.Invoke(new Action(() => { UpdateLayout(); }));
}

private void RefreshData()
{
foreach (object tab in _tabItems)
{
if (tab is TitleDetailsView)
{
TitleDetailsViewModel vm = ((TitleDetailsView)tab).DataContext as TitleDetailsViewModel;
vm.Refresh();
}
}
}

private void UpdateLayout()
{
foreach (object tab in _tabItems)
{
if (tab is TitleDetailsView)
{
TitleDetailsViewModel vm = ((TitleDetailsView)tab).DataContext as TitleDetailsViewModel;
vm.HandleGetTitleBySymbolResponse();
}
}
}

关于我应该如何进行的任何建议?

最佳答案

为什么不使用 DispatcherTimer ?这将在调度程序线程中“滴答作响”。

除此之外,仅从您对“线程有问题”的描述很难说出什么问题。

关于c# - 在 WPF 中使用计时器刷新 UI(使用 BackgroundWorker?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3981550/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com