C# 线程不重新加载DataGridView
我有一个DataGridView,应该由线程重新加载。但是当线程执行时,DataGridView会闪烁,并且不会加载更改 有趣的是,如果我在线程上尝试代码,而不是在主线程上执行的线程上,那么DataGridView会很好地重新加载 这是我的密码:C# 线程不重新加载DataGridView,c#,multithreading,datagridview,C#,Multithreading,Datagridview,我有一个DataGridView,应该由线程重新加载。但是当线程执行时,DataGridView会闪烁,并且不会加载更改 有趣的是,如果我在线程上尝试代码,而不是在主线程上执行的线程上,那么DataGridView会很好地重新加载 这是我的密码: public void reloadClients(object source, EventArgs e) { //Console.WriteLine("Clients will reload.
public void reloadClients(object source, EventArgs e)
{
//Console.WriteLine("Clients will reload.");
dgvClientes.DataSource = null;
loadReloadClients = new Thread(new ThreadStart(jobReloadAllClients));
loadReloadClients.Start();
}
private void jobReloadAllClients()
{
this.Invoke((MethodInvoker)delegate
{
descricaoCliente.Text = "CARREGANDO TODOS OS CLIENTES";
});
System.Windows.Forms.BindingSource bs = new BindingSource();
bs.DataSource = clientes.allClients().Tables["Clientes"];
this.Invoke((MethodInvoker)delegate
{
descricaoCliente.Text = "Todos os Clientes";
dgvClientes.DataSource = bs;
dgvClientes.Refresh();
});
}
编辑
正如我被告知在主线程上设置绑定数据源,并在后台线程上加载BD数据。。。。
Siveajet这是我到目前为止得到的
System.Windows.Forms.BindingSource bs;
public void reloadClients(object source, EventArgs e)
{
//Console.WriteLine("Clients will reload.");
dgvClientes.DataSource = null;
bs = new BindingSource();
dgvClientes.DataSource = bs;
loadReloadClients = new Thread(new ThreadStart(jobReloadAllClients));
loadReloadClients.Start();
}
private void jobReloadAllClients()
{
this.Invoke((MethodInvoker)delegate
{
descricaoCliente.Text = "CARREGANDO TODOS OS CLIENTES";
});
DataSet Setter = clientes.allClients();
this.Invoke((MethodInvoker)delegate
{
bs.DataSource = Setter.Tables["Clientes"];
descricaoCliente.Text = "Todos os Clientes";
//dgvClientes.DataSource = bs;
//dgvClientes.Refresh();
});
}
我做到了。。。出于某种原因,我不得不取消分配变量bs,然后再次初始化它。。。现在它工作得很好
System.Windows.Forms.BindingSource bs;
public void reloadClients(object source, EventArgs e)
{
//Console.WriteLine("Clients will reload.");
bs = null;
dgvClientes.DataSource = null;
bs = new BindingSource();
dgvClientes.DataSource = bs;
loadReloadClients = new Thread(new ThreadStart(jobReloadAllClients));
loadReloadClients.Start();
}
private void jobReloadAllClients()
{
this.Invoke((MethodInvoker)delegate
{
descricaoCliente.Text = "CARREGANDO TODOS OS CLIENTES";
});
DataSet Setter = clientes.allClients();
this.Invoke((MethodInvoker)delegate
{
bs.DataSource = Setter.Tables["Clientes"];
descricaoCliente.Text = "Todos os Clientes";
});
}
在主线程上创建并使用一个bindingsource如何加载clientes.allClients.Tables[clientes];进入bindingSource?clientes.allClients.Tables[客户];它使用线程中的timeLoad数据表并分配bindingsource.datasource和invoke方法不起作用。。。我将bindingSource作为全局变量,在线程中加载datatable,并使用evoke方法分配bindingSource.datasource,并且没有结果=发布您得到的结果