在带有out按钮点击事件的加载窗体上使用backgroundworker
本文关键字:窗体 加载 backgroundworker 事件 out 按钮 | 更新日期: 2023-09-27 18:28:58
我想在没有按钮点击事件的加载表单上动态使用后台工作程序c#
我的装载表格是:
public void FrmListeClient_Load(object sender, EventArgs e)
{
timer1.Enabled = true;
CnxBase cnx = new CnxBase();
c1TrueDBGrid1.DataSource = GestionCredit.service.Client.getInstance().GetClient();
grd_Liste_Credit_Client.DataSource = GestionCredit.service.Client.getInstance().GetCredit();
cnx.CloseConnection(CnxBase.myConn);
}
我不知道你为什么要使用
timer1.Enabled = true;
如果要定期刷新数据,则应使用timer1对象的Timer事件,而不是form_Load。在这种情况下,您应该检查backgroundworker.IsBusy
属性,以避免启动两次相同的工作。
若要使用backgroundworker,请在表单中添加一个backgroundworker控件。然后您可以使用DoWork和RunWorkerCompleted事件:请注意,您不能在DoWork事件中分配数据源属性,因为它在另一个线程中执行,并且不能与用户界面交互
private void Form1_Load(object sender, EventArgs e) {
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) {
CnxBase cnx = new CnxBase();
Tuple<List<Client>, List<Credit>> result;
result.Item1 = GestionCredit.service.Client.getInstance().GetClient();
result.Item2 = GestionCredit.service.Client.getInstance().GetCredit();
cnx.CloseConnection(CnxBase.myConn);
e.Result = result;
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
Tuple<List<Client>, List<Credit>> result = e.Result as Tuple<List<Client>, List<Credit>>;
c1TrueDBGrid1.DataSource = result.Item1;
grd_Liste_Credit_Client.DataSource = result.Item2;
}