2013-10-19 148 views
2

我有一个datagridview,我需要从数据库中每秒刷新一次。我编写了这段代码,以便我的UI不会冻结,并且数据获取操作在后台运行,但仍会冻结/延迟我的UI。我需要你的专业知识让我知道我在这里做了什么错误。C#TPL每秒更新Gridview每秒

我有一个名为符号的窗体的主窗体。

Symbols childForm1 = new Symbols(); 
childForm1.MdiParent = this; 
this.SplitContainer2.Panel1.Controls.Add(childForm1); 
childForm1.Dock = DockStyle.Fill; 
childForm1.Show(); 

代码中的符号表 - >

public DataSet Result { get { return (DataSet)this.dataGridView1.DataSource; } set { this.dataGridView1.DataSource = value.Tables[0]; } } 

private Task<DataSet> StartBackgroundWork() 
    { 
    return new WorkItem().DoWork(); 
    } 
private void Form_Load(object sender, EventArgs e) 
{ 
    System.Windows.Forms.Timer MyTimer = new System.Windows.Forms.Timer(); 
    MyTimer.Interval = (1000); 
MTimer.Tick += MyTimer_Tick; 
MyTimer.Start(); 
    } 
private void MyTimer_Tick(object sender, EventArgs e) 
{ 
    this.StartBackgroundWork() 
          .ContinueWith((t) => this.Result = t.Result, TaskScheduler.FromCurrentSynchronizationContext()); ; 
    } 
public class WorkItem 
{ 
    public Task<DataSet> DoWork() 
    { 
    return Task.Factory.StartNew<DataSet>(this.PerformWork); 
    } 

    private DataSet PerformWork() 
    { 
    DataSet dt = new DataSet(); 
    ServiceReference1.tblOrder obj = new ServiceReference1.tblOrder(); 
    obj.order_id = login.client_id; 
    ServiceReference1.Service1Client objService = new ServiceReference1.Service1Client(); 
    dt = objService.symboldata(obj); 
    return dt; 
    } 
} 
+2

绑定到网格的集合有多大?这可能是由于UI渲染造成的。 – Douglas

+0

如果您有大量数据,则每秒可能过于频繁。 – YK1

+0

正在提取的数据并不是那么大。只有20 - 25行...但他们需要每秒获取以获取更新的数据。请建议最佳解决方案。 – user2424075

回答

0

使用BackgroundWorker的类的UI避免冰冻。