表单未在c#中显示

时间:2015-04-20 08:36:00

标签: c# multithreading

我有一个类似这样的program.cs:

namespace SumSwamp
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}

但是当我运行程序时它执行没有任何错误但是form1没有显示。如果我做错了请告诉我

Here是我的表单类。

2 个答案:

答案 0 :(得分:2)

根据您发布的代码,您的错误就在于此部分;

public static Boolean WaitForRoll = true;
public static int Turn = 0;

public Form1()
{
    InitializeComponent();
    this.Load += new EventHandler(this.Form1_Load);
    while(Turn == 0) //always true
    {
        if (WaitForRoll==false) //always false
        {
            //never reached code
            DieTotal=DieLargeNum;
            Random rnd1 = new Random();
            DieLargeNum = rnd1.Next(1, 7);
            if (DieTotal>DieLargeNum)
            {
                Turn = 1;
                labelStatus.Text = "Player 1's Turn";
                WaitForRoll=true;
            }
            else
            {
                Turn = 2;
                labelStatus.Text = "Player 2's Turn";
                WaitForRoll = false;
            }
        }
    }

    //...
}

仔细观察它会发现你的代码永远不会离开第一个while循环,因此构造函数永远不会结束,导致永远不会创建Form1对象。

一些提示;

  • 重新考虑你的设计。您不应将此代码放在构造函数中,而应放在方法中。
  • 阅读while循环。如果使用不当,它们会很痛苦,你这样做了。

答案 1 :(得分:1)

您的Form1不可见,因为您的代码中存在无限循环。请检查以下代码是否无限。

while ((CompSum < TotalSpaces) & (PlayerSum < TotalSpaces))
{
    ...
}