wpf中,Loaded事件中,做了些读取数据操作之后, Task中调用一个不断更新数据的方法后,界面卡死了。
1.注释Application.Current.Dispatcher.Invoke及里面的代码后,又不卡了
2.改用Timer去执行RefreshData中的代码不卡,但又达不到需求
3.想将RefreshData写为async方式,但又提示要用await,不然是同步 ;但我想采用异步,让这个自己开个线程去执行就好
我现在就是想在加载窗体后,单独开个异步线程处理界面更新。界面还可以响应其他操作,求指教
private void Monitoring_Loaded(object sender, RoutedEventArgs e)
{
Task.Run(() =>
{
RefreshData();
});
}
public void RefreshData()
{
while(true)
{
Application.Current.Dispatcher.Invoke
....
}
}
不知道你这个问题是否已经解决, 如果还没有解决的话:DispatcherTimer只有wpf才能使用,和winform中的timer差不多。
记得使用using
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;
namespace WpfApp2
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
int a = 0;
public MainWindow()
{
InitializeComponent();
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += Timer_Tick;
timer.Start();
}
private void Timer_Tick(object sender, EventArgs e)
{
a++;
lblA.Content = a.ToString();
}
}
}