使用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();
}
}
我甚至从未看到叠加层,但如果我暂停,则循环正在运行。
答案 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()
不会被调用。使循环退出,您应该看到对话框打开。或者,你也可以通过在第二行放置断点来测试它是否被击中(你应该已经这样做了)。