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