在加载表单上使用backgroundworker并按下按钮单击事件

时间:2016-01-05 11:04:25

标签: c#

我想在没有按钮点击事件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);

    }

1 个答案:

答案 0 :(得分:1)

我不知道你为什么要用这行

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