C# Visual Studio应用程序已退出,代码为-1(0xffffffff),应用程序未响应

C# Visual Studio应用程序已退出,代码为-1(0xffffffff),应用程序未响应,c#,.net,visual-studio,winforms,C#,.net,Visual Studio,Winforms,我的Windows窗体应用程序在调试后正常运行,但当我按下开始按钮时,它没有响应,当我停止调试时,输出日志显示它已退出,代码为-1(0xFFFFFF)。我正在使用Visual Studio 2017社区v。15.7.14. 和.NET framework 4.7.03056。 有人能找到bug或者它不工作的其他原因吗? 代码: { 公共部分类Form1:Form { 静态计时器myTimer=新计时器(); boolpokus1; boolpokus2; boolpokus3; boolpoku

我的Windows窗体应用程序在调试后正常运行,但当我按下开始按钮时,它没有响应,当我停止调试时,输出日志显示它已退出,代码为-1(0xFFFFFF)。我正在使用Visual Studio 2017社区v。15.7.14. 和.NET framework 4.7.03056。 有人能找到bug或者它不工作的其他原因吗? 代码:

{
公共部分类Form1:Form
{
静态计时器myTimer=新计时器();
boolpokus1;
boolpokus2;
boolpokus3;
boolpokus4;
boolpokus5;
双h=0;
双v;
乌隆t;
双HMOTNOT;
双F;
公共表格1()
{
初始化组件();
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
字符串polomer=textBox1.Text;
字符串m=textBox2.Text;
字符串p=textBox3.Text;
字符串nv=textBox4.Text;
字符串T=textBox5.Text;
双r;
乌隆特拉克;
乌隆·维斯卡;
双花被片;
双hustotaV=1.29;
双m_p=0;
int rS=trackBar1.Value;
myTimer.Interval=(1000-(rS*100));
myTimer.Start();
v=0;
pokus1=双锥虫(polomer,out r);
if(!pokus1)//这里我需要安全的“非数字”输入
{
MessageBox.Show(“Zadejte kladnou hodnotu诉Metech,menšnežulong”);
}
pokus2=双锥虫(m,外HMOTNOT);
如果(!pokus2)
{
MessageBox.Show(“Zadejte kladnou hodnotu v Kiggech,menšnežulong”);
}
pokus3=UInt64.TryParse(p,外tlak);
如果(!pokus3)
{
MessageBox.Show(“Zadejte kladnou hodnotu v pascalech,menšnežulong”);
}
pokus4=UInt64.TryParse(内华达州,外vyska);
如果(!pokus4)
{
MessageBox.Show(“Zadejte kladnou hodnotu诉Metech,menšnežulong”);
}
pokus5=双锥虫(T,外花被片);
如果(!pokus5)
{
MessageBox.Show(“Zadejte kladnou hodnotu ve stupích Celsia,menšnežlong”);
}
其他的
{
如果(H_BTN.Checked==true)
{
m_p=0.0899*((4/3)*Math.PI*Math.Pow(r,3));
}
否则,如果(他检查==真)
{
m_p=0.179*((4/3)*Math.PI*Math.Pow(r,3));
}

而(h代码中有两个问题导致了此问题:

  • 我在任何地方都看不到
    myTimer.Tick+=timer1\u Tick;
  • 你正在UI线程上运行所有东西,因为这个计时器。勾号永远不会被点击。 我建议在单独的线程上运行while循环

        Task.Run(() =>
        {
            while (h <= 35000)
            {
                ...
            }
        });
    
    Task.Run(()=>
    {
    
    while(h)试着减少你的程序。这里有很多与你的问题(或你的问题)无关。请看。如果
    F
    变为负值,就会发生奇怪的事情。当你改变它时,检查
    F
    的值,看看它是否变为负值。Matthew Watson-你能说出什么是“奇怪的事情”吗?我知道一开始它会变成负值,但我使用Math.sqrt和Math.Abs,所有使用F的变量都是双变量,所以我在这里看不到问题。@dejf哦,对不起,误读了它。如果
    hmotnost
    变成负值,你会遇到问题,但似乎唯一可以变成负值的方法是用户输入一个负数。Y你必须调试while()循环,当程序永远循环时,它将停止响应。请确保知道如何使用调试器,你至少需要熟悉设置断点和单步执行代码。
        Task.Run(() =>
        {
            while (h <= 35000)
            {
                ...
            }
        });