2013-10-08 92 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',它不會拋出。 –

相關問題