Графический интерфейс Windows Forms зависает при вызове OpenFileDialog.ShowDialog ()

мой проект - это проект трехуровневой архитектуры, взаимодействующий со службой 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 #.

Что-нибудь, что мне здесь не хватает?

6
задан Kage 16 July 2011 в 14:54
поделиться