Я пытаюсь отключить части пользовательского интерфейса в приложении .NET на основе опроса, выполненного в фоновом потоке. Фоновый поток проверяет, все ли открыто и работоспособно глобальное подключение к базе данных, которое использует приложение.Многопотоковые делегаты/события
Что мне нужно делать, и предпочтет сделать это без опроса в потоке пользовательского интерфейса, это добавить обработчик событий, который может быть поднят фоновым потоком, если состояние соединения изменится. Таким образом, любая форма может иметь обработчик, который отключит те части пользовательского интерфейса, которые требуют подключения к функции.
Попытка использования объявления прямого события в классе, который содержит подтекст потока, и воссоздание события в фоновом потоке, вызывающее ошибки выполнения кросс-потоков в отношении доступа к элементам управления пользовательского интерфейса из других потоков.
Очевидно, что есть правильный способ сделать это, но у нас ограниченный опыт работы с событиями (в основном, приложения с одним потоком), и почти нет делегатов. Я прочитал документацию и примеры для делегатов, и это похоже на то, что нам нужно, но я не уверен, как заставить его работать в этом случае.
Приложение написано в основном на VB.NET, но пример или помощь на C# тоже хороши.
В dotNET у вас не должно быть постоянно открытого глобального соединения. Прочитайте ConnectionPooling. http://stackoverflow.com/questions/2715714/ –
@ Хенк Холтерман: Вы не можете сделать это заявление, если не знаете его обстоятельств. Кроме того, не рекомендуется с поставщиками, которые Microsoft включает в себя. – AMissico
@ AMissico: Используя мою технику ниже, это не имеет значения (она работает одинаково хорошо ...) –