データベースから毎秒更新する必要があるデータグリッドビューがあります。UI がフリーズせず、データ フェッチ操作がバックグラウンドで実行されるように、このコードを記述しましたが、それでも UI がフリーズ/遅延します。私がここでやっている間違いを知らせるために、あなたの専門知識が必要です。
Symbols という名前のフォームを呼び出しているマスター フォームがあります。
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;
}
}