为什么我不能运行这个单独的窗口

时间:2015-04-27 01:01:19

标签: c# winforms

使用c#winforms,我试图进行一种叠加。以下是我正在测试的内容:

主窗口有以下代码:

OverlayThread = new Thread(DisplayOrderOverlay);
OverlayThread.Start();

private void DisplayOrderOverlay(object obj)
    {
        ActiveOrderOverlay AOA = new ActiveOrderOverlay();
        AOA.StartLoop();
        AOA.ShowDialog();
    }

并且叠加层只是表单上的一个列表框,其中包含以下代码:

public void StartLoop()
    {
        while (true)
        {
            Thread.Sleep(500);
            Random r = new Random();
            listBox1.Items.Add(r.Next().ToString());
            this.Refresh();
        }
    }

我甚至从未看到叠加层,但如果我暂停,则循环正在运行。

2 个答案:

答案 0 :(得分:1)

while (true)循环将永远运行,因此冻结你的app。通常情况下,在某种情况下你会break这样的循环来终止循环。

可能您正在寻找每500毫秒的Timer设置,其处理程序会将随机数添加到列表中。

附注:查看Random number generator only generating one random number以正确创建Random

答案 1 :(得分:1)

AOA.StartLoop();
AOA.ShowDialog();

您开始循环并尝试在同一个线程上显示对话框,因此在循环结束之前(它永远不会),AOA.ShowDialog()不会被调用。使循环退出,您应该看到对话框打开。或者,你也可以通过在第二行放置断点来测试它是否被击中(你应该已经这样做了)。