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



我的 Windows 窗体应用程序在调试后正常运行,但是当我按下开始按钮时,它没有响应,当我停止调试时,输出日志显示它以代码 -1 (0xffffffff( 退出。我正在使用Visual Studio 2017 Community v. 15.7.14。和 .NET 框架 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();
}
}
}

表格 1

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

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

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

你可以通过调试轻松找到这一点,所以如果你是Visual Studio的新手,我建议学习如何调试你的首要任务。

最新更新