Я тоже встречал эту проблему. И я попробовал все решения здесь, и никто не может решить его. Затем я меняю целевой фреймворк с .Net Framework 4.7 на 4.6.2, проблема решена ...
роект - трехуровневая архитектура с поддержкой службы WCF в бэкэнде. Когда бэкэнд может извлекать данные из службы, он уведомляет бизнес-уровень с помощью публикации-подписки, которая, в свою очередь, уведомляет уровень графического интерфейса.
Я добавил 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 # UI.
Что-то мне здесь не хватает?