Windows在C#中死机

Man*_*dia 0 c#

我正在Visual Studio 2010中编写C#程序,以构建一个Windows应用程序.

我创建了一个名为Store的类.在Store类中,我创建了一个名为StoreLength的方法(Store ob)

public int StoreLength(Store ob)
    {
        int i = 0, L = 0;
        while (i < 100)
        {
            if (ob.a[i] != null)
                L += 1;
        }
        return L;
Run Code Online (Sandbox Code Playgroud)

现在从其他类我创建了一个Store类的对象.使用该对象我试图使用StoreLength方法.

 private void buttonEqual_Click(object sender, EventArgs e)
    {
        int l = ob.StoreLength(ob);
        DisplayUnit.Text = Convert.ToString(l);
    }
Run Code Online (Sandbox Code Playgroud)

现在,当我运行程序时,每个标志都正常工作,但是当我点击buttonEqual时,窗口会冻结.我认为在buttonEqual1_Click mothod或StoreLength方法中存在一些问题.

请帮忙.

小智 7

这是因为while循环的条件总是得到满足.

每次评估时i,它总是小于100,因为你设置它0并且它的值不会改变.

典型的方法是i在每次迭代时增加1:

  while (i < 100)
  {
     i++;

     if (ob.a[i] != null)
       L += 1;   
  }
Run Code Online (Sandbox Code Playgroud)

导致它冻结的原因是因为你的UI正在"等待"(以迂回的方式)来完成这个while循环.

另外,考虑使用这样for的场景循环.为了便于阅读和一致性,它建议在一行上声明,初始化,条件和增量:

for(int i = 0; i < 100; i++)
{
   if (ob.a[i] != null)
   L += 1;    
}
Run Code Online (Sandbox Code Playgroud)