【问题标题】:DialogResult handling对话结果处理
【发布时间】:2011-12-13 16:04:20
【问题描述】:

我有一个关于从 wpf/ 访问对话数据的问题我有一个 ProgressDialog :System.Windows.Window 我在 OnButtonClick 中这样称呼它:

        void OnButtonClick(object sender, RoutedEventArgs e)
        {   
            ProgressDialog dlg = new ProgressDialog("");
            //dlg.AutoIncrementInterval = 0;
            LibWrap lwrap = new LibWrap();
            DoWorkEventHandler handler = delegate { BitmapFrame bf = lwrap.engine(frame); };
            dlg.CurrentLibWrap = lwrap;
            dlg.AutoIncrementInterval = 100;
            dlg.IsCancellingEnabled = true;
            dlg.Owner = Application.Current.MainWindow;
            dlg.RunWorkerThread(0, handler);
}

问题是 - 如果 DialogResult 正常,如何检查此函数(OnButtonClick)(换句话说 - 完成执行后如何访问 dlg 的内部字段)?

【问题讨论】:

    标签: c# wpf progressdialog dialogresult


    【解决方案1】:

    DialogResult 通常不是内部字段而是一个相当公共的属性,所以dlg.DialogResult 应该没问题(鉴于它继承自 Window),您需要将其转换为布尔值。

    我没有看到你在任何地方打开窗口,如果你使用ShowDialog,返回值自动是DialogResult,调用线程会阻​​塞直到它关闭。

    var result = (bool)dlg.ShowDialog();
    

    如果您需要非模态对话框,您可以使用Show 订阅Closed 事件并查看DialogResult 那里。

    dlg.Closed += (_,__) =>
    {
        var result = (bool)dlg.ShowDialog();
        // Do something with it.
    }
    dlg.Show();
    

    当然,无论哪种情况,对话框都需要设置属性。 Alt+f4 等默认操作将其设置为 false。

    【讨论】:

    • ShowDialog 在 RunWorkerThread ->return ShowDialog() ??假的;
    • 它返回 bool 但我尝试了: if(dlg.RunWorkerThread(0, handler)) 但我的数据仍在处理中 - 我无法访问
    • 你为什么要做任何类型的测试?只需等待对话框引发事件即可。
    • 我试过 dlg.Closing += new CancelEventHandler(dlg_Closing); dlg.Closed +=new EventHandler(dlg_Closed);进度对话框折叠后(不是错误)(
    • 倒闭或实际关闭?此外,如果对话框实际上已关闭,则方法 应该 被调用,我不知道你在那里做什么......
    猜你喜欢
    • 2012-03-12
    • 2017-02-25
    • 2012-03-14
    • 1970-01-01
    • 2012-05-22
    • 2011-05-31
    • 2012-11-26
    • 2020-06-27
    • 2016-10-22
    相关资源
    最近更新 更多