gpt4 book ai didi

wpf - 可以使用BackgroundWorker的ReportProgress来做其他事情吗?

转载 作者:行者123 更新时间:2023-12-03 11:00:52 24 4
gpt4 key购买 nike

我正在使用MVVM方法编写WPF应用程序。在我的ViewModel中,我有一个ObservableCollection。我的应用程序需要定期检查新消息,如果有,则需要将它们添加到ObservableCollection中。

如果我尝试在DoWork中添加到ObservableCollection,则由于线程同步问题而无法正常工作。看起来最简单的方法是在UI线程上执行此操作,方法是执行ReportProgress()并从那里更新集合。

我的问题是:从理论上和技术上,可以从ReportProgress处理程序更新UI,即使“按法律规定”我实际上并未报告进度。

还有更完善的方法吗?

*编辑:代码使用调度程序计时器运行*

View 模型

class MyViewModel
{
public ObservableCollection<string> MyList { get; set; }

public MyViewModel()
{
MyList = new ObservableCollection<string>();
}
}

“teh codez”-只是一个示例,不是我的实际应用程序代码。
    private void Window_Loaded(object sender, RoutedEventArgs e)
{

MyViewModel mvm = new MyViewModel();
this.DataContext = mvm;

DispatcherTimer mytimer = new DispatcherTimer();
mytimer.Interval = TimeSpan.FromSeconds(5.0);
mytimer.Tick += new EventHandler(mytimer_Tick);

mytimer.Start();


}

void mytimer_Tick(object sender, EventArgs e)
{
((DispatcherTimer)sender).Stop();

MyViewModel mvm = this.DataContext as MyViewModel;
mvm.MyList.Insert(0, DateTime.Now.ToLongTimeString());

((DispatcherTimer)sender).Start();
}

看起来它可以很好地满足我的需求,并且不会给我多余的行李(例如取消,工作人员完成等)。

最佳答案

如果您要在应用程序中实现轮询类型的功能,则使用DispatcherTimer间隔触发一次而不是不断在BackgroundWorker内部循环运行可能更有意义。

http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatchertimer.aspx

关于wpf - 可以使用BackgroundWorker的ReportProgress来做其他事情吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3454918/

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