0

我对 DataGridView.Invoke 有疑问。

delegate void CheckMainTableCallback();
static void CheckMainTable()
{
    if (Program.MonitorApp.ServersTable.InvokeRequired)
    {
        CheckMainTableCallback Safe = new CheckMainTableCallback(CheckMainTable);
        MonitorApp.ServersTable.Invoke(Safe);
    }
    else
    {
        foreach (DataGridViewRow r in MonitorApp.MainTable.Rows)
        {
            **r.Cells["Load"].Value = 
                (Servers.Find(
                    p => p.NAME == r.Cells[0].ToString()
                )
                .GetSystemValue("% Proccess Usage"));** // exception here
        }
    }
}

所以我调用 CheckMainTable 从 ServersTable (由另一个线程使用)获取值到我的 MainTable。它抛出 NullReference。我究竟做错了什么?

4

1 回答 1

1

因此,追踪这样的异常是一个逐步的过程。考虑这一行代码的事实:

r.Cells[0].ToString()

可以抛出 if r.Cells[0]is null

此外,.GetSystemValue如果结果来自 are ,将Servers.Find(...抛出null

于 2013-10-08T12:43:12.967 回答