У меня есть приложение C#, у которого есть значок в системном трее. Когда пользователь щелкнет правой кнопкой мыши, он отобразит меню.Почему OpenFileDialog не открывается?
- открыть файл
- выход
Когда пользователь щелкает 1. open file
, он будет показывать (ShowDialog) форму с двумя кнопками
- открыт файл
- близко
Когда пользователь щелкает 1. open file
, он будет делать
OpenFileDialog openFile = new OpenFileDialog();
openFile.Filter = "All files (*.*)|*.*";
DialogResult result = openFile.ShowDialog(); // deadlock here
if (result == DialogResult.OK){
// do some thing
}
В строке 3 приложения тупики
- Пользователь не может взаимодействовать с формой, он не отвечает
- OpenFileDialog не показывает
Не могли бы вы объяснить причину возникновения этой проблемы?
Update Ответ
- Форма, которую создают иконку в системном трее вызывается из другого потока.
- Я установил:
thread.SetApartmentState(ApartmentState.STA);
, OpenFileDialog покажет.
При открытии модального диалога, такого как OpenFileDialog, это нормально, что вы не можете взаимодействовать с родительской формой. Или вы говорите, что OpenFileDialog с именем openFile, который замораживается? – Steve
@Steve при показе OpenFileDialog пользователь не может взаимодействовать с формой, которая называется OpenFileDialog. И OpenFileDialog НЕ показывает. – GSP
Диалоговое окно MODAL по дизайну MODAL. Он блокирует все в цепочке форм до вызова. См. Http://stackoverflow.com/questions/2834799/winforms-programming-modal-and-non-modal-forms-problem. Если вы находитесь в точке своего кода, где вам нужен ввод файла для вашего пользователя, тогда есть нет смысла продолжать свой код без этого файла. – Steve