【问题标题】:Update datagridview row from a thread in c#从 C# 中的线程更新 datagridview 行
【发布时间】:2010-08-10 11:42:00
【问题描述】:

我在 Windows 窗体应用程序上有一个 datagridview。

应用程序将所有显示的数据发布到外部网站。网站返回代码,以便应用程序确定发布数据的状态。

我需要创建一个以行索引为参数的参数化线程,并发布行数据并通过返回值对其进行更新。 (可能涉及更改行背景颜色和更改列值)

有可能像我想的那样吗?还是有更好的方法?

【问题讨论】:

    标签: c# windows multithreading datagridview


    【解决方案1】:

    好吧,由于 DataGridView 是一个 GUI 控件,您将无法从另一个线程对其进行更改。您必须向主 GUI 线程发送消息。幸运的是,C# 对此有很好的支持。编写一个执行实际工作的方法(可能在您的主表单类中):

    public void SetRowFromWebResult(int row, Color background, ...)
    {
        // ...
    }
    

    然后,在您的线程中,在表单对象上使用Invoke 方法(不是委托):

    myForm.Invoke(() => myForm.SetRowFromWebResult(row, background, ...));
    

    所以大概你会在这样的线程中运行你的 HTTP 请求:

    int row = ...;
    var myThread = new Thread(() =>
    {
        // Fire off the request
        var request = WebRequest.Create(...);
        var response = ...;
    
        // Calculate the parameters (e.g. row background color)
        Color background = (response.Code == ...) ? ... : ...;
    
        // Tell the GUI to update the DataGridView
        myForm.Invoke(() => myForm.SetRowFromWebResult(row, background, ...));
    });
    myThread.Start();
    

    【讨论】:

      【解决方案2】:

      此外,您可以使用后台工作线程来防止跨线程异常。

      问候

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-04
        • 1970-01-01
        • 2012-06-24
        • 2013-10-13
        • 2011-09-17
        • 1970-01-01
        • 1970-01-01
        • 2019-10-12
        相关资源
        最近更新 更多