c# - DataGridView ScrollBars 在 Thread 之后不工作

标签 c# multithreading winforms scroll datagridview

我正在将 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/

相关文章:

c# - C# : are they faster than iterators, 中的纤程,有人使用过它们吗?

c# - 如何在属性中存储 Linq where 条件

c# - 生产者/消费者 msdn 示例如何工作?

c# - 如何关闭网络浏览器控件中的查找窗口

vb.net - 错误 InvalidArgument=尝试将项目添加到 ListView 时, '1' 的值对于 'index' 无效 -- VB

c# - C#中如何从Treeview的选定节点中获取下一个直接节点?

C# 泛型和集合

c# - 字符串的 LINQ 部分包含在列表成员中

c++ - 分析磁盘访问

javascript - 浏览器中的并行性