Я знаю, что есть несколько тем, касающихся этой темы, но я думаю, что моя отличается. В моем приложении я открываю форму, в которой пользователь может ввести некоторые параметры для предстоящей печати. Эта печать должна выполняться в фоновом режиме. Поэтому я запускаю этого фонового рабочего с событием «OnFormClosing».
Внутри этого фонового рабочего мне нужно получить доступ к графическому интерфейсу и изменить/прочитать его, поэтому мне нужен control.Invoke(). «Иногда» Invoke застревает на самом вызове вызова и не выполняет делегат. Мой основной поток работает нормально и не блокируется. Я все еще могу взаимодействовать с графическим интерфейсом, делая другие вещи. Прежде чем публиковать какой-либо код: существуют ли какие-либо другие условия для выполнения control.Invoke(), кроме
- Основной поток графического интерфейса не блокируется
- Контроллер должен существовать, дескриптор создан и не может быть удален.
Основной поток не обязательно должен быть свободным и именно вызов называется правильно? Он должен продолжаться, когда основной поток простаивает...
Спасибо за любую помощь
Обновление:
Вот ситуация с потоком во время этой проблемы: Основной поток выполняет это:
Application.Run(appContext);
Так что бездействует. Рабочий поток ожидает в этой строке:
fileName = (string)cbPrintFile.Invoke(new Func<String>(() => cbPrintFile.Text));
который не выполняется, как я указал выше. cbPrintFile
— поле со списком
ReportProgress
и т. д., чтобы сообщить потоку пользовательского интерфейса. См. stackoverflow.com/questions/3289920/. - person MoonKnight   schedule 11.03.2013OnFormClosing
. Какие элементы управления вы затем обновляете с помощьюcontrol.Invoke()
? Если вы пытаетесь обновить форму, которая пытается закрыться, это может быть частью вашей проблемы... - person Dan Puzey   schedule 11.03.2013control.Invoke
? Если вы запускаете код во времяOnFormClosing
, то разница в поведении при использованииBackgroundWorker
может быть огромной. Это может помочь, если вы разместите код...! - person Dan Puzey   schedule 11.03.2013OnFormClosing
? - person Dan Puzey   schedule 11.03.2013