Visual Studio应用程序以代码-1(0xffffffff)退出,应用程序没有响应

时间:2018-07-04 11:11:07

标签: c# .net visual-studio winforms

我的Windows Forms应用程序通常在调试后运行,但是当我按开始按钮时,它没有响应,并且当我停止调试时,输出日志显示它已退出,代码为-1(0xffffffff)。我正在使用Visual Studio 2017社区版本15.7.14。和.NET Framework 4.7.03056。 有人可以找到错误或其他原因使其无法正常工作吗? 代码:

{
   public partial class Form1 : Form
{
    static Timer myTimer = new Timer();

    bool pokus1;
    bool pokus2;
    bool pokus3;
    bool pokus4;
    bool pokus5;
    double h = 0;
    double v;
    ulong t;
    double hmotnost;
    double F;
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        string polomer = textBox1.Text;
        string m = textBox2.Text;
        string p = textBox3.Text;
        string nv = textBox4.Text;
        string T = textBox5.Text;
        double r;

        ulong tlak;
        ulong vyska;
       double teplotac;
        double hustotaV = 1.29;
        double m_p = 0;


        int rS = trackBar1.Value;

        myTimer.Interval = (1000 - (rS * 100));
        myTimer.Start();
        v = 0;

        pokus1 =  Double.TryParse(polomer,out r);
        if (!pokus1) //here I want secure "Non-number" inputs
        {
            MessageBox.Show("Zadejte kladnou hodnotu v metrech, menší než ulong");
        }
        pokus2 = Double.TryParse(m, out hmotnost);
        if (!pokus2)
        {
            MessageBox.Show("Zadejte kladnou hodnotu v kilogramech, menší než ulong");
        }
        pokus3 = UInt64.TryParse(p, out tlak);
        if (!pokus3)
        {
            MessageBox.Show("Zadejte kladnou hodnotu v pascalech, menší než ulong");
        }
        pokus4 = UInt64.TryParse(nv, out vyska);
        if (!pokus4)
        {
            MessageBox.Show("Zadejte kladnou hodnotu v metrech, menší než ulong");
        }
        pokus5 = Double.TryParse(T, out teplotac);
        if (!pokus5)
        {
            MessageBox.Show("Zadejte kladnou hodnotu ve stupích Celsia, menší než long");
        }
        else
        {
            if (H_BTN.Checked == true)
            {
                m_p = 0.0899 * ((4 / 3) * Math.PI * Math.Pow(r,3));
            }
            else if (He_BTN.Checked == true)
            {
                m_p = 0.179 * ((4 / 3) * Math.PI * Math.Pow(r,3));
            }
            while (h <= 35000)
            {
                double Dvm;
                double Dv;
                double teplota = teplotac + 273.149806372;
                Dvm = 2.75874 + 0.0598528 * teplota - 2.626e-5 * teplota * teplota + 5.22e-9 * teplota * teplota * teplota;
                Dv = (Math.Round(Dvm * 1e3)) / 1e3;
                string vD = Dv.ToString();
                label9.Text = vD;
                double Ov = 6 * Math.PI * Dv * v * r;
                label12.Text = Ov.ToString();
                double Fvz = ((4 / 3) * Math.PI * r * r * r) * hustotaV * 9.81;
                hmotnost = hmotnost + m_p;
                double Ft = (hmotnost) * 9.81;
                F = Fvz - Ft - Ov;



            }
        }


    }



    private void timer1_Tick(object sender, EventArgs e)
    {
        t++;
        v = Math.Sqrt(Math.Abs((F * 35000)) / hmotnost);
        h = v * t;
        label15.Text = v.ToString();
        label16.Text = h.ToString();
        string h_c = h.ToString();

        int h_v;
        bool odp = Int32.TryParse(h_c, out h_v);
        progressBar1.Value = h_v;


    }

    private void H_BTN_CheckedChanged(object sender, EventArgs e)
    {

    }

    private void Form1_Load(object sender, EventArgs e)
    {
        myTimer.Stop();
    }
}

}

Form 1

1 个答案:

答案 0 :(得分:-1)

您的代码中有2个导致此问题的问题:

  1. 我在任何地方都看不到myTimer.Tick += timer1_Tick;
  2. 由于此计时器,您正在UI线程上运行所有内容。 我建议在单独的线程上运行while循环

        Task.Run(() =>
        {
            while (h <= 35000)
            {
                ...
            }
        });
    

您可以通过调试容易地找到它,因此,如果您不熟悉Visual Studio,建议您学习如何调试您的头等大事。