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