#vb.net #exception-handling #clickonce #mschart
#vb.net #обработка исключений #clickonce #mschart
Вопрос:
Я разработал приложение ClickOnce с использованием элементов управления MS Chart. Это отлично работает для построения графиков. Но, поскольку элемент управления диаграммой должен быть установлен заранее (с правами администратора, а не при классическом развертывании ClickOnce), мне нужно определить, доступен ли компонент на компьютере.
Итак, я попытался создать новую диаграмму и обработать возможное исключение, но, похоже, его невозможно перехватить (слишком низкоуровневое исключение?) :
Try
Dim oChart as New Chart
Catch
' Some user-friendly message to ask the user to contact the helpdesk
End Try
Этот код никогда не выполняется: я получаю необработанное исключение, как только я ввожу событие, в котором находится этот код.
Подробности о вызове JIT-отладки вместо этого диалогового окна см. В конце этого сообщения.
******* Текст исключения ***** System.IO.FileNotFoundException: не удалось загрузить файл или сборку ‘System.Windows.Формы.Визуализация данных, версия = 3.5.0.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35’ или одна из его зависимостей. Система не может найти указанный файл. Имя файла: ‘System.Windows.Формы.Визуализация данных, версия = 3.5.0.0, культура = нейтральная, PublicKeyToken= 31bf3856ad364e35’ в SIPReportingControl.Main.expMain_SelectedGroupChanged(отправитель объекта, GroupEventArgs e) в Infragistics.Win.UltraWinExplorerBar.SelectedGroupChangedEventHandler.Вызов (отправитель объекта, GroupEventArgs e)
У вас есть какие-нибудь идеи, чтобы:
- иметь возможность развертывать элементы управления MS Chart с помощью ClickOnce (я не думаю, что это возможно).
- определите, установлены ли элементы управления диаграммой или нет.
- поймайте это странное исключение.
Заранее спасибо.
Отредактируйте вызывающий метод (исключение генерируется, даже если я нажимаю в другой группе, чем Reporting):
Private Sub expMain_SelectedGroupChanged(sender As Object, e As Infragistics.Win.UltraWinExplorerBar.GroupEventArgs) Handles expMain.SelectedGroupChanged
Try
If blnDoEvent Then
CleanControls()
Select Case e.Group.Key
Case "Search"
DisplayGrid(True)
Case "AddEdit"
DisplayAddEdit(Nothing)
Case "Reporting"
Dim oChart As New Chart
End Select
End If
Catch ex As Exception
MsgBox(ex.Message amp; vbCrLf amp; ex.StackTrace)
End Try
End Sub
Ответ №1:
Я видел интересный ответ об исключении, которое было сгенерировано в сгенерированном коде MSIL для вызова функции, к сожалению, оно было удалено, и я не могу добавить к нему комментарий.
Я понял, что ваш код не несет ответственности за запуск события. Я бы предложил поместить весь оператор целиком в подраздел и назвать его заключенным в try catch таким образом :
Private Sub expMain_SelectedGroupChanged(sender As Object, e As Infragistics.Win.UltraWinExplorerBar.GroupEventArgs) Handles expMain.SelectedGroupChanged
Try
RedirectTo(e.Group.Key)
Catch ex As Exception
MsgBox(ex.Message amp; vbCrLf amp; ex.StackTrace)
End Try
End Sub
Sub RedirectTo(Screen as string)
If blnDoEvent Then
CleanControls()
Select Case Screen
Case "Search"
DisplayGrid(True)
Case "AddEdit"
DisplayAddEdit(Nothing)
Case "Reporting"
Dim oChart As New Chart
End Select
End If
End Sub
Это лучше?