我有以下代码,我仍然遇到#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:
此外,用户启动对话框和显示对话框之间的时间限制。如果超出这些操作之间的时间限制,则会发生异常。
我无法看到点击事件后的几行如何占用此时间限制。
有关如何避免这种情况的任何建议吗?
由于
答案 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两次。