2014-09-07 3 views
0

Я создаю FileWatcher, и я добавляю метод watcher_Changed как событие.
По прошествии некоторого времени он вылетает в секции улова как NullReferenceObject (ошибка IIS Express).FileWatcher - NullObjectReference

private static void watcher_Changed(object sender, FileSystemEventArgs e) 
{ 
    try 
    { 
     fWatcher.EnableRaisingEvents = false; 
     System.Threading.Thread.Sleep(300); 
     var newLoc = ReadLines(); 
     var context = GlobalHost.ConnectionManager.GetHubContext<MyHub1>(); 
     //Do something 
     fWatcher.EnableRaisingEvents = true; 
    } 
    catch(Exception err) 
    { 
//Error appears here 
     fWatcher.EnableRaisingEvents = false; 
     fWatcher = null; 
     fWatcher.Dispose(); 
     fWatcher = new FileSystemWatcher(); 
     while (fWatcher.EnableRaisingEvents != true) 
     { 
      try 
      { 
       fWatcher.EnableRaisingEvents = true; 
      } 
      catch(Exception exc) 
      {      
       System.Threading.Thread.Sleep(100); 
      } 

     } 

    } 
} 

Как это исправить?

+0

Вы можете приступить к его исправлению с помощью отладчика, чтобы определить, какой объект имеет значение null. Я предполагаю, что сборщик мусора поет fWatcher после окончания сеанса/срока использования приложения. Вы получаете null в fWatcher, а затем вы вызываете его свойство ... – PTwr

+0

Вы уверены, что инициировали fWatcher? Можете ли вы дать нам полный код? –

+0

MohammadMirMostafa: Да, он инициирован, он отлично работает, но иногда он падает. PTwr: Ну, я должен проверить это. Может быть, это так ... – user3692826

ответ

0
fWatcher = null; //You cannot do this "fWatcher." after this line 
         //(Until you call fWatcher = new FileSystemWatcher() at least) 
    fWatcher.Dispose(); //You cannot do this !!!!! 

Если вы хотите утилизировать его, сначала вызовите Dispose(), а затем создайте новый. Вы не можете вызвать метод на объекте, который равен нулю

+0

Итак, если мое приложение застрянет, и я бы хотел перезагрузить FileWatcher, я должен удалить строку «fWatcher = null;», да? Я понял, что ничего не могу сделать, когда объект имеет значение null. Просто удалить старый и создать новый? – user3692826

+0

fWatcher = null; не удаляет объект. Это означает, что ЕСЛИ сборщик мусора называется объектом, который будет удален. Итак, да, удалите эту строку –

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