Как я могу заставить часть кода выполняться в моем основном потоке?
Вот почему я хотел бы знать:
У меня есть пользовательское окно сообщения, которое иногда отображается из потока, который не является основным потоком. Однако, когда вызывается конструктор окна сообщения, я получаю исключение InvalidOperationException, говорящее: «Вызывающий поток должен быть STA, потому что это требуется для многих компонентов пользовательского интерфейса». Это имеет смысл, элементы пользовательского интерфейса должны обрабатываться в основном потоке.
Моя функция MessageBox.ShowMessage (...) - это статическая функция, которая создает экземпляр моего настраиваемого окна сообщения и показывает его. Есть ли что-то, что я мог бы добавить в ShowMessage, что заставило бы окно сообщения быть созданным и показанным в главном потоке? В другом месте моего кода я использую Control.BeginInvoke для решения подобных проблем, но, поскольку это статическая функция, для меня не существует уже существующего элемента пользовательского интерфейса для вызова BeginInvoke.
Нужно ли вызывать MessageBox.ShowMessage с помощью Control.BeginInvoke? Я бы предпочел, чтобы BeginInvoke (или некоторый эквивалент) вызывался из ShowMessage.