消息框后显示自定义消息框

时间:2015-02-22 21:17:51

标签: c# silverlight windows-phone-8.1 messagebox

我有一些代码,当我调用CustomMessageBox时,它会显示一个框,其中包含一个用户提示,表示我要添加的对象数量,一旦完成,我就将其添加到对象列表中。添加后,它会显示MessageBox.Show,让用户知道它已添加。

我的问题是,当我运行代码时,它会执行所有代码,绕过自定义消息框的显示,然后显示MessageBox.Show,然后显示CMB.Show。我通过调试器运行代码并跟踪路径,它在MessageBox.Show之前点击CMB.Show,但是在代码完成后显示。对不起,我还在学习,可能不会很好地解决问题,如果有什么我可以进一步解释,请告诉我。

一些代码:

    private int BasicLand(Card basicLand)
    {
        var countBox = new TextBox
        {
            Name = "count",
            Width = 100,
        };


        var cmbCount = new CustomMessageBox
        {
            Caption = "Blah",
            Content = countBox,
            RightButtonContent = "ok",
        };

        cmbCount.Dismissed += (s1, e1) =>
        {
            switch (e1.Result)
            {
                case CustomMessageBoxResult.RightButton:
                    if (int.TryParse(countBox.Text, out tempInt) && Convert.ToInt32(countBox.Text) > 0)
                    {
                        countReturn = Convert.ToInt32(tempInt);
                        break;
                    }
                    else
                    {
                        //Some code for error....
                    }
            }
        };

        cmbCount.Show();

    return countReturn;
    }

然后是另一个首先触发但在代码块中最后的部分。

    MessageBox.Show("Object was added to List!");

我尝试将ShowDialog添加到自定义框中,但它在VS中出现了问题。 BasicLand在另一个方法中调用,当对象添加到列表时,它将显示MessageBox.Show。

1 个答案:

答案 0 :(得分:0)

您的代码存在问题,它没有考虑任何用户交互是异步的。当你调用Show()它实际上会显示消息框,但它不会阻止你当前运行的线程,调用Show()后的其他语句将立即执行,因此你的方法返回一个返回值用户未提供但仅为默认值。要解决此问题,您必须以延续的方式编写代码。

private void PromtUserForFeeblefezerAmount(Action<int> continueFeeblefzing, Action cancel)
{
    var messagebox = CreateFeeblefezerPromt();
    messagebox.Dismissed += (sender, args) =>
    {
        if ( args.Result == CustomMessageBoxResult.RightButton )
            continueFeeblefzing( GetFeeblefezerAmount(messagebox) );
        else
            cancel();
    };
    messagebox.Show();
}