2014-01-08 4 views
0

У меня есть функция, которая проходит через список серверов, а затем для каждого выполняет ряд функций.Необработанное исключение при использовании арифметических операторов VB

В начале каждой итерации, мне нужно вычислить, какие «шаг» процесс в настоящее время (так что индикатор может быть обновлен правильно), но эта строка вызывает ошибку -

Me.CurrentStepLoop = ((Me.CurrentServerLoop - 1) * Me.ServerSteps) + 1 

Все три упомянутых свойств являются целыми числами, а значения являются довольно низкими (т.е. CurrentServerLoop имеет максимум 6 и ServerSteps имеет максимум 20, так что CurrentStepLoop может быть не более, что 101 из этого уравнения.

Здесь ошибка, которую я получаю -

Необработанного исключения типа «System.Reflection.TargetInvocationException» произошел в mscorlib.dll
Дополнительной информации: Исключение было брошено в адресат вызова.

Я нахожу это особенно странно, что у меня есть строка в вопросе внутри Try...Catch, пока ошибка не обрабатывается мой код, и вместо этого я вижу общую Визуальная ошибку Exchange. Линия на самом деле не подсвечена, но я знаю, что, как если бы я ее прокомментировал, ошибка не возникает

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

Вот Snippit, что я считаю, является причиной проблемы, а также link to the full code -

For Each CurrentServer In Me.Servers 

    If bw.CancellationPending = True Then 
     e.Cancel = True 
     Exit For 
    Else 

     Try 
      Me.CurrentStepLoop = ((Me.CurrentServerLoop - 1) * Me.ServerSteps) + 1 
     Catch Ex As Exception 
      Dim ErrorForm As New formError(Ex) 
      e.Cancel = True 
      Exit For 
     End Try 

     MappingResult = Me.DoMapDrives(CurrentServer) 
     If Not MappingResult Then bw.CancelAsync() : Exit For 

     {...Other actions here...} 

     CurrentServerLoop += 1 

    End If 

Next 
+1

Вы можете добавить обработчик необработанного исключения в свой код. Например, добавьте 'AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf HandleUnhandledExceptionEvent' в метод загрузки формы (или эквивалентной точки входа), а затем опросите исключение в этом обработчике исключений, чтобы получить дополнительную информацию о том, что происходит. На самом деле. –

+1

Эта ошибка не вызвана типом, а заданными переменными и тем, как вы к ним обращаетесь. Пожалуйста, укажите код, в котором объявлены все переменные, и дополнительные проблемы, которые должны быть известны (например, с использованием нескольких потоков). – varocarbas

+0

@varocarbas - я не буду включать весь код на этом этапе (это довольно много), но могу сказать, что образец в вопросе исходит из функции 'bw_DoWork()', и, следовательно, вызовы, описанные выше, встречаются в «BackgroundWorker». Кроме того, «BackgroundWorker» работает в форме, и свойства, о которых идет речь, объявляются в этой форме. Пожалуйста, дайте мне знать, если вы хотите узнать больше ... –

ответ

0

Я нашел ошибку, и почему это произошло.

В способе SetSteps() Я вычисляю Me.StepSize, но я делал это неправильно. Изменение этого -

Me.StepSize = Me.proProgress.Maximum/Me.ServerSteps 

К этому решил проблему -

Me.StepSize = Me.proProgress.Maximum/Me.TotalSteps 

Проблема в том, что бар прогресс был установлен прошел это максимум, который вызвал ошибку. Благодарю.

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