C# 没有用户交互的WPF后台处理?
我正在制作一个小程序,它将主要呈现来自不同来源的信息,我需要在后台进行一个持续的循环来完成这项艰巨的工作。但是我不能按任何按钮来获取这些信息,它需要自己运行 我对WPF的整个概念还不熟悉,尽管整个XAML部分让我感觉很整洁,但我仍在尝试适应这样的想法,即整个概念感觉非常受事件驱动 我已经研究过System.ComponentModel.BackgroundWorker类,但它感觉不对,因为它是由DoWOrk和WorkComplete定义的,而这永远不会是WorkCompleteC# 没有用户交互的WPF后台处理?,c#,wpf,wpf-4.0,C#,Wpf,Wpf 4.0,我正在制作一个小程序,它将主要呈现来自不同来源的信息,我需要在后台进行一个持续的循环来完成这项艰巨的工作。但是我不能按任何按钮来获取这些信息,它需要自己运行 我对WPF的整个概念还不熟悉,尽管整个XAML部分让我感觉很整洁,但我仍在尝试适应这样的想法,即整个概念感觉非常受事件驱动 我已经研究过System.ComponentModel.BackgroundWorker类,但它感觉不对,因为它是由DoWOrk和WorkComplete定义的,而这永远不会是WorkComplete 执行后台处理、避
执行后台处理、避免用户交互的正确方法是什么?我建议使用
System.Threading.Timer
。下面是一些示例代码隐藏类,它将每秒用当前时间更新一个名为timeLabel
的标签:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.Loaded += MainWindow_Loaded;
}
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
Timer timer = new Timer(TimerElapsedHandler, null, 0, 1000);
}
private void TimerElapsedHandler(object state)
{
this.Dispatcher.Invoke(() => { timeLabel.Content = DateTime.Now.ToLongTimeString(); });
}
}
您还可以使用某种BackgroundWorker/Task/Anything,让它在单独的线程中执行以下内容:
while (...)
{
this.Dispatcher.Invoke(() => { timeLabel.Content = DateTime.Now.ToLongTimeString(); });
Thread.Sleep(1000);
}
BackgroundWorker还有一个ReportProgress
使用userState作为对象传回信息
它是一个对象,因此您可以传递任何需要传递的内容
您可以使用
System.Timers.Timer
以防您要以固定的时间间隔调用某个代理。