C# 为什么可以';我不能运行这个单独的窗口吗

C# 为什么可以';我不能运行这个单独的窗口吗,c#,winforms,C#,Winforms,使用c#winforms,我试图制作一种覆盖。以下是我正在测试的内容: 主窗口有以下代码: OverlayThread = new Thread(DisplayOrderOverlay); OverlayThread.Start(); private void DisplayOrderOverlay(object obj) { ActiveOrderOverlay AOA = new ActiveOrderOverlay(); AOA.StartLoop

使用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();
        }
    }
覆盖图只是表单上的一个列表框,带有以下代码:

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();
        }
    }
我甚至从未看到覆盖,但如果我暂停,循环正在运行

while(true)
循环将永远运行,从而冻结您的应用程序。通常,在某种条件下,您会
中断此类循环的
,以终止循环

您可能正在寻找每500毫秒设置一次的
计时器
,该处理器将随机数添加到列表中

旁注:查看是否正确创建了
Random

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

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

啊,那是真的,真不敢相信我没有注意到。但是什么时候才是安全的循环呢?我不能在Overlay.OnLoad上调用它,因为这样它就永远无法完成加载。在看到您的答案后,我立即解决了自己的问题<代码>ActiveOrderOverlay AOA=新的ActiveOrderOverlay();AOA.Show();AOA.startoop()