【发布时间】:2016-09-21 22:11:29
【问题描述】:
如何在不阻塞 UI 的情况下使用任务异步等待每隔几秒运行一次任务。下面是我使用计时器的示例。我能够每隔几秒钟运行一次函数,但它阻塞了 UI。有人可以帮助我吗?我是异步编程的新手。
private void Form1_Load(object sender, EventArgs e)
{
gridControl1.DataSource = GetData();
timer.Interval = 5000;
timer.Tick += new EventHandler(MyTimer_Tick);
timer.Start();
}
private void MyTimer_Tick(object sender, EventArgs e)
{
gridControl1.DataSource = GetData();
gridControl1.RefreshDataSource();
}
DataTable GetData()
{
DataTable dt = new DataTable();
dt.Columns.Add("Value1", typeof(int));
dt.Columns.Add("Value2", typeof(int));
dt.Columns.Add("Value3", typeof(int));
dt.Columns.Add("Value4", typeof(int));
dt.Columns.Add("Value5", typeof(int));
dt.Columns.Add("Value6", typeof(int));
dt.Columns.Add("Value7", typeof(int));
dt.Columns.Add("Value8", typeof(int));
dt.Columns.Add("Value9", typeof(int));
dt.Columns.Add("Value10", typeof(int));
dt.Columns.Add("Value11", typeof(int));
dt.Columns.Add("Value12", typeof(int));
Random rnd = new Random();
for (int i = 1; i < 1000000; i++)
{
dt.Rows.Add(rnd.Next(1, 100), rnd.Next(1, 100), rnd.Next(1, 100),
rnd.Next(1, 100), rnd.Next(1, 100), rnd.Next(1, 100), rnd.Next(1, 100), rnd.Next(1, 100), rnd.Next(1, 100),
rnd.Next(1, 100), rnd.Next(1, 100), rnd.Next(1, 100));
}
return dt;
}
【问题讨论】:
-
您使用的是什么版本的 C#?
-
@RJProgrammer - 我使用的是 4.6 版
标签: c# async-await task