例外; mscorlib.ni.dll中出现“System.FormatException”类型的异常,但未在用户代码中处理

时间:2013-05-27 12:16:05

标签: windows-phone-7 c#-4.0 windows-phone-8

您好我有一个Windows Phone 8应用程序我有异常

  

mscorlib.ni.dll中发生了'System.FormatException'类型的异常,但未在用户代码中处理

     

以下是代码

  private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        double basestolen;
        double attempedstales;
        double avarege;
        double putout;




         if (puttext.Text.Length == 0 | basetext.Text.Length==0 )
        {

            MessageBox.Show(" Enter Values for Base Stolen and Putouts ");

        }

         basestolen = Convert.ToDouble(basetext.Text);
        putout = Convert.ToDouble(puttext.Text);



        attempedstales = basestolen + putout;


        if (attempedstales != 0  )
        {

            avarege = (((basestolen / attempedstales) / 100));
            avarege = avarege * 10000;
            avgtext.Text = Convert.ToString(avarege);


        }
        else
        {
            MessageBox.Show("Attemped Stales Value should not be Zero");
        }



    }

应用程序运行,如果我没有在文本框中输入值,则返回msg框,但之后应用程序停止并返回上面的exption?有什么问题?

2 个答案:

答案 0 :(得分:3)

错误很可能在这里:

basestolen = Convert.ToDouble(basetext.Text);
putout = Convert.ToDouble(puttext.Text);

如果数字不是有效格式,则抛出FormatException。 (see more here)。尝试使用double.TryParse以安全的方式解析您的值。

double result;    
bool success = double.TryParse(basetext.Text, NumberStyles.Any, CultureInfo.InvariantCulture, out result);

答案 1 :(得分:0)

您忘记在显示消息框后停止执行您的方法:

if (puttext.Text.Length == 0 || basetext.Text.Length==0 )
{
    MessageBox.Show(" Enter Values for Base Stolen and Putouts ");
    return;
}

此外,将字符串转换为double时,请务必指定文化。您的Windows Phone应用程序将由世界各地的用户执行,并且某些国家/地区使用不同的小数分隔符。例如:

basestolen = Convert.ToDouble(basetext.Text, CultureInfo.InvariantCulture);