Я читал, пытаясь выяснить, почему я получаю это исключение безрезультатно.Я надеюсь, что кто-то видел это раньше:
Я использую Visual Basic 2010.
Вкратце, у меня есть форма «Панель настроек», создание которой занимает некоторое время (она содержит многометки и текстовые поля), поэтому я создаю его в другом потоке.
После загрузки его можно просмотреть, нажав кнопку, которая изменяет видимость формы на True.Я использую следующую подпрограмму для обработки вызовов для своих элементов управления:
Public Sub InvokeControl(Of T As Control)(ByVal Control As T, ByVal Action As Action(Of T))
If Control.InvokeRequired Then
Control.Invoke(New Action(Of T, Action(Of T))(AddressOf InvokeControl), New Object() {Control, Action})
Else
Action(Control)
End If
End Sub
Вот соответствующая часть моего основного кода (SettingsTable наследует TableLayoutPanel, а HelperForm наследует Form):
Public Class ch4cp
Public RecipeTable As SettingsTable
Public WithEvents SettingsWindow As HelperForm
Private Sub ch4cp_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
PanelCreatorThread = New Threading.Thread(AddressOf CreateStartupPanels)
PanelCreatorThread.Start()
End Sub
Private Sub CreateStartupPanels()
SettingsWindow = New HelperForm("Settings Panel")
SettingsTable = New SettingsTable
SettingsTable.Create()
SettingsWindow.Controls.Add(SettingsTable)
End Sub
Private Sub ViewSettingsPanel_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ViewSettingsPanel.CheckedChanged
InvokeControl(SettingsWindow, Sub(x) x.Visible = ViewSettingsPanel.Checked)
End Sub
SettingsTableМетод .Create () генерирует набор меток и текстовых ящиков на основе содержимого настроек приложения и добавляет их в таблицу параметров.
Когда я нажимаю флажок ViewSettingsPanel, я получаю ошибку нарушения межпотокового режима.Есть идеи?Я был бы очень признателен.