在带有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);
    }

在带有out按钮点击事件的加载窗体上使用backgroundworker

我不知道你为什么要使用

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;
}