c# - DataGridView 可编辑时 DataGridView/数据集的线程安全更新

标签 c# multithreading datagridview dataset

我有一个包含 Dataset ds 和 DataGridView dgv 的 WinForms 应用程序。 dgv 绑定(bind)到 ds。

ds 通过 Task() 更新,该 Task() 使用 TableAdapter.Fill() 方法定期查询数据库。我在这里遇到了两个问题。

  • 更新 ds 时,不会刷新 dgv,除非调整窗口大小或某些其他事件导致表单重绘。
  • 当用户开始编辑 dgv 中的单元格时,ds 会更新并由于多个线程访问同一个 GUI 控件而导致 UI 崩溃。我尝试使用由 DataGridView dgv 中的某些事件设置的标志 EditModeOn,尽管这无助于防止线程错误。

  • 拥有可由用户编辑并通过更改绑定(bind)数据集(在另一个线程中更新)来更新 DataGridView 的最佳方法是什么?

    最佳答案

    对于您的第 2 点,您可以使用函数 Invoke从控制类。该函数将在 UI 线程中执行该函数。

    http://msdn.microsoft.com/en-us/library/zyzhdc6b.aspx

    前任。 :

    // Invoke an anonymous method on the thread of the form.
    this.Invoke((MethodInvoker) delegate
    {
        //Call your function to update your datagridview with the dataset in parameters
        ...
    });
    

    关于c# - DataGridView 可编辑时 DataGridView/数据集的线程安全更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5301714/

    相关文章:

    c# - 对于 C、COBOL 程序员,开始 C# 的最佳方式是什么?

    c# - 如何获取二维数组中的 DataGridView 数据?

    c# - DataGridView AllowUserToAddRow 属性不起作用

    c# - 如何在 ASP.NET Core 中启用 CORS

    c# - 循环访问数据库

    java - 可靠地再现数据库争用

    java - 整数值没有得到刷新

    c# - {"Object reference not set to an instance of an object."}

    c# - 如何在界面显示进度条时对 COM 对象进行长时间调用?

    c# - Application.Run(Form) 与 Form.Show()?