мой проект - это проект трехуровневой архитектуры, взаимодействующий со службой WCF в бэкэнде. Когда серверная часть может получать данные из службы, она уведомляет бизнес-уровень с помощью публикации-подписки, которая, в свою очередь, уведомляет уровень GUI.
Я добавил OpenFileDialog в свой дизайн пользовательского интерфейса с помощью конструктора Visual Studios. Обработчик событий кнопки вызывает сообщение ShowDialog. Однако как только я нажимаю кнопку, весь пользовательский интерфейс зависает.
Немного погуглив, я обнаружил, что использование делегатов является предпочтительным способом решения подобных задач. Однако ни с делегированием, ни без него проблема сохраняется.
В настоящее время мой код выглядит следующим образом:
private void bOpen_Click(object sender, EventArgs e)
{
Func<Image> del = delegate
{
OpenFileDialog d = new OpenFileDialog();
if (d.ShowDialog() == DialogResult.OK)
{
return Image.FromFile(d.FileName);
}
return null;
};
Invoke(del);
}
Я пришел из мира Java, поэтому я не очень хорошо знаком с тонкостями программирования пользовательского интерфейса C #.
Что-нибудь, что мне здесь не хватает?