Я пытаюсь добиться линейного кода без каких-либо «фоновых работников», работающих рядом с моей основной программой (за исключением нескольких System.Windows.Forms.Timers). Я использую Private Subs, чтобы исключить необходимость копирования и вставки, например, тех же 50 строк кода 10 раз в моей программе (что упрощает редактирование и прокрутку). Однако я столкнулся с проблемой поперечной резьбы. Как я понимаю, потому что я не доступ к свойству из потока пользовательского интерфейса, код:Использовать отдельные подсистемы, не вызывая пропорциональности
Private Sub Update()
DataGridView1.Rows.Clear()
...
...
...
End Sub
Дает мне ошибку:
Control 'DataGridView1' accessed from a thread other than the thread it was created on.
До сих пор я использую Control.CheckForIllegalCrossThreadCalls = False
в моем случае Form_Load но теперь я сталкиваюсь с некоторыми проблемами, когда таймеры не перезапускаются.
Есть ли способ заставить его работать линейно, поэтому мне не нужно каждый раз вызывать метод? Я имею около 2000 строк кода прямо сейчас, и мне было бы очень не обязательно проходить через все вызовы Button50.enabled = true
и так далее.
Вызов/Делегирование является правильным способом для доступа управления из рабочих потоков. Вам нужно вернуться и исправить их. – OneFineDay