DataGridView ScrollBars 在线程之后不起作用

Dan*_*aHa 4 c# multithreading scroll datagridview winforms

我将数据表设置为数据网格视图的数据源。我在一个新线程上执行此操作(我不希望我的 UI 在加载数据时被阻塞)。我的困境是:线程完成后滚动条不起作用。我尝试在加载数据之前设置 Scrollbars.None,然后设置 Scrollbars.Both。还尝试了刷新。但只帮助我显示滚动条,这些仍然没有工作。

如果我在我的主体中使用相同的代码,它可以完美运行。

那么我该怎么做才能让它发挥作用呢?

我的代码:

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;
    }
Run Code Online (Sandbox Code Playgroud)

Dan*_*aHa 7

好的,我终于明白了。我在我的线程中使用了 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
    });

}
Run Code Online (Sandbox Code Playgroud)