用户单击后,对话框必须是用户启动的例外

时间:2014-04-01 10:10:27

标签: c# silverlight openfiledialog

我有以下代码,我仍然遇到#34;对话必须由用户启动" ofd.ShowDialog();

的异常
    private void btnOpen_Click(object sender, RoutedEventArgs e)
    {
        OpenFileDialog ofd = new OpenFileDialog();
        ofd.Filter = ALLOWED_FILE_TYPES;
        ofd.FilterIndex = 1;
        ofd.Multiselect = false;
        bool? userClickedOK = ofd.ShowDialog();

        if (userClickedOK == true)
        {.....}
    }

来自MSDN:

  

此外,用户启动对话框和显示对话框之间的时间限制。如果超出这些操作之间的时间限制,则会发生异常。

我无法看到点击事件后的几行如何占用此时间限制。

有关如何避免这种情况的任何建议吗?

由于

2 个答案:

答案 0 :(得分:0)

好的,我自己没有测试过,但也许我在一个非常相似的SO问题/答案中找到了一个提示:

private OpenFileDialog OpenFileDialog {get;set;}

public Ctor()
{
    OpenFileDialog = new OpenFileDialog();
}

private void btnOpen_Click(object sender, RoutedEventArgs e)
{
    ...
    ... OpenFileDialog.ShowDialog();
    ...
}

constructor中实例化对话框,只调用按钮单击处理程序中的ShowDialog方法,而不实例化新对话框。

[编辑] 那是我提到的question/answer

答案 1 :(得分:0)

我找到了原因。 Loaded事件正在构造函数中订阅,虽然构造函数只为控件调用一次,但加载的even被调用两次,因此btnOpen_Click事件正在订阅两次。 我可以通过取消订阅控件卸载事件中的加载事件来修复它,但是我仍然不确定为什么要调用Loaded两次。