我正在将 dataTable 设置为 datagridview 的数据源。我在一个新线程上执行此操作(我不希望我的 UI 在加载数据时被阻塞)。 我的困境是:线程完成后滚动条不工作。我尝试在加载数据之前设置 Scrollbars.None,然后设置 Scrollbars.Both。还尝试刷新。但只帮助我显示滚动条,这些仍然没有用。
如果我在我的委托(delegate)人中使用相同的代码,thread 它可以完美地工作。
那么我该怎么做才能让它发挥作用呢?
我的代码:
private void PressKey(object sender, KeyPressEventArgs e)
{
var process = new Thread(this.LoadData);
process.Start();
}
private void LoadData()
{
CheckForIllegalCrossThreadCalls = false;
this.dgv.ScrollBars = ScrollBars.None;
this.dgv.Columns.Clear();
this.dgv.DataSource = MyDataTable;
this.dgv.ScrollBars = ScrollBars.Both;
}
最佳答案
好吧,我终于明白了。我在线程中使用了 MethodInvoker。它允许我在 UI 线程上运行并更新控件:
private void LoadData()
{
CheckForIllegalCrossThreadCalls = false;
this.dgv.Columns.Clear();
this.dgv.DataSource = MyDataTable;
this.Invoke((MethodInvoker)delegate
{
dgv.ScrollBars = ScrollBars.Both; // runs on UI thread
});
}
关于c# - DataGridView ScrollBars 在 Thread 之后不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31209841/