C #: Показать диалог в потоке пользовательского интерфейса из другого потока

Я новичок в C #, но я сделал много java. Вот моя проблема: я пытаюсь открыть "SaveFileDialog" из потока, который не является потоком пользовательского интерфейса.

Это именно то, что я пытаюсь сделать:

public partial class Form1: Form
{
    public string AskSaveFile()
    {
        var sfd = new SaveFileDialog();
        sfd.Filter = "Fichiers txt (*.txt)|*.txt|Tous les fichiers (*.*)|*.*";
        sfd.FilterIndex = 1;
        sfd.RestoreDirectory = true;
        DialogResult result = (DialogResult) Invoke(new Action(() => sfd.ShowDialog(this)));
        if(result == DialogResult.OK)
        {
            return sfd.FileName;
        }

        return null;
    }
}

Этот метод всегда будет вызываться из потока, отличного от тот, кто владеет формой. Проблема в том, что когда я выполняю этот код, «Form1» зависает, а «SaveFileDialog» не отображается.

У вас есть какие-то подсказки, которые помогут мне показать диалог из независимого потока?

9
задан Moinonime 27 August 2011 в 13:38
поделиться