2013-10-10 2 views
-1

Я создаю приложение Windows, используя стороннюю DLL. Они дали некоторые предопределенные методы для использования. Существует метод SetTag(), который используется для обновления значения. Теперь моя работа - получить данные от клиента tcp и отправить этот метод. Моя часть tcp работает хорошо, я ее протестировал. Проблема возникает в то время, когда я звоню SetTag(). Он хорошо работает на некоторое время, но через какое-то время, он показывает точно в момент отладчик всплывающее окно с исключениемНеобработанное исключение произошло в myproject.vshost.exe

необработанное исключение произошло в myproject.vshost.exe

Я не» t понять, откуда это исключение.

Всякий раз, когда я получаю данные от TCP клиента, мой UpdateValues() называется, который называет третьей стороной SetTag()

// valuesInArray is an object array which contain 
// the data from tcp client after converted to object 
UpdateValues(valuesInArray); 

и метод:

public void UpdateValues(object[] values) 
{ 
    this.BeginUpdate(); 
    for (int i = 0; i < 9; i++) 
    { 
     this.SetTag(TagHandle[i], (values[i]), Quality.Good, FileTime.UtcNow); 
    } 
    this.EndUpdate(false); 
} 

Я создал симулятор, где данные не поступают из tcp-клиента, и отправляет данные в событие таймера. В этом случае ошибка не возникает, и программа работает плавно. Можете ли вы предположить, почему эта ошибка возникает с использованием клиента tcp и как я от него избавляется?

+0

Как насчет окружающих SetTag (...) с попыткой поймать и INVE stigating stacktrace и внутреннее исключение «необработанного» исключения, когда это происходит? [Учебное пособие по отладке] (http://msdn.microsoft.com/en-us/library/vstudio/sc65sadd.aspx) – wonko79

+0

Что такое объявление SetTag в коде C#? Правильны ли параметры, как ожидалось? – stamhaney

+0

try catch не попадает на ошибку. как увидеть stacktrace? – mahua22

ответ

0

Вы не указали достаточно подробностей, чтобы объяснить, что такое ошибка. Тем не менее, ваш код выиграет от использования try {} catch {} для «обработки» исключения. Исключением являются детали, которые вы ищете.

общественных пустот UpdateValues ​​(

object[] values) 
{ 
    this.BeginUpdate(); 
    for (int i = 0; i < 9; i++) 
    { 
     try 
     { 
      this.SetTag(TagHandle[i], (values[i]), Quality.Good, FileTime.UtcNow); 
     } 
     catch (Exception e) 
     { 
      // Log or print out the details 
      Console.WriteLine("Error occurred setting the value."); 
      Console.WriteLine(e); 
     } 
    } 
    this.EndUpdate(false); 
} 

В этом примере, сообщение исключением и трассировки стека выводятся на консоль. Посмотрите на этот выход за дело вашего исключения.

+0

сэр, этот блок не обнаруживает ошибок. – mahua22

0

В .NET 4 и позже, необходимо отметить, содержащий метод (UpdateValues) с HandleProcessCorruptedStateExceptionsAttribute и SecurityCriticalAttribute поймать некоторые специальные исключения, такие как AccessViolationException

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