2013-10-08 3 views
0

У меня проблема с DataGridView.Invoke.DataGridView.Invoke throws 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 («% использования процесса»)); –

+0

Какая часть этого кода? Будьте максимально конкретными. Когда отладка, какая ссылка на свойство дает вам это исключение? –

ответ

1

Таким образом, отслеживание исключений, подобных этому, является поэтапным процессом. Рассмотрим тот факт, что эта строка кода:

r.Cells[0].ToString() 

может бросить, если r.Cells[0] является null.

Далее, .GetSystemValue будет выбрасывать, если результат Servers.Find(... был null.

+0

спасибо, и дал мне правильное направление для решения моей проблемы, вот ответ: p.NAME == r.Cells [0] .Value.ToString() –

+0

@ Greag.Deay, да, вы можете использовать 'Convert.ToString (r.Cells [0] .Value) тоже. Таким образом, если значение ячейки «null», оно не будет выбрано. –

Смежные вопросы