2013-10-08 171 views
0

我有DataGridView.Invoke问题。DataGridView.Invoke抛出NullReferenceException

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。 我做错了什么?

+0

你的代码的哪个部分会引发异常? –

+0

@DeeMac r.Cells [“Load”]。Value =(Servers.Find(p => p.NAME == r.Cells [0] .ToString())。GetSystemValue(“%Proccess Usage”)); –

+0

该代码的哪一部分?要尽可能具体。调试时,什么属性引用给你这个异常? –

回答

1

因此,追踪这样的异常是一个逐个过程。考虑的是,这行代码:如果r.Cells[0]null

r.Cells[0].ToString() 

可以抛出。

此外,如果Servers.Find(...的结果为null,则会抛出.GetSystemValue

+0

谢谢,你给我正确的方向来解决我的问题,这里是答案:p.NAME == r.Cells [0] .Value.ToString() –

+0

@ Greag.Deay,是的,你可以使用'Convert.ToString (r.Cells [0] .Value)。这样,如果单元格值为'null',它不会抛出。 –

相关问题