【发布时间】:2016-08-25 08:38:38
【问题描述】:
我有一个与数据库一起运行的应用程序。当我在 datagridview 中加载表时,我的表单冻结了。加载表格时如何保证加载动画流畅?
我为动画运行两个线程并将数据加载到表中,但动画仍然无法正常工作。
private volatile bool threadRun;
private void UpdateTab()
{
// Create panel for animation
Panel loadingPanel = new Panel();
// Label, where the text will change
Label loadingLabel = new Label();
loadingLabel.Text = "Loading";
loadingPanel.Controls.Add(loadingLabel);
this.Controls.Add(loadingPanel);
// thread loading animation
threadRun = true;
Task.Factory.StartNew(() =>
{
int i = 0;
string labelText;
while (threadRun)
{
Thread.Sleep(500);
switch (i)
{
case 0:
labelText = "Loading.";
i = 1;
break;
case 1:
labelText = "Loading..";
i = 2;
break;
default:
labelText = "Loading...";
i = 0;
break;
}
loadingLabel.BeginInvoke(new Action(() => loadingLabel.Text = labelText));
}
});
// thread update DataGridView
Thread update = new Thread(ThreadUpdateTab);
update.Start();
}
private void ThreadUpdateTab()
{
// SQL Query...
myDataGridView1.Invoke(new Action(() => myDataGridView1.DataSource = myDataSet1.Tables[0]));
// ...
myDataGridView10.Invoke(new Action(() => myDataGridView10.DataSource = myDataSet10.Tables[0]));
threadRun = false;
}
【问题讨论】:
-
为什么要混合使用线程和任务?选择一个,而不是两个。选择 TPL,恕我直言。
-
Reza Aghaei,this 正是我所需要的,谢谢!
-
@DartAlex 如果您使用加载微调器而不使加载数据异步,您可能会看到微调器不旋转或被冻结。所以你需要让你的加载数据异步。
标签: c# .net multithreading winforms datagridview