C# 检查表单是否已加载
我有两张表格C# 检查表单是否已加载,c#,.net,winforms,C#,.net,Winforms,我有两张表格 其中一个是主窗体(我们称之为主窗体) 另一个用于显示一些警告(我们称之为dialogForm) 。dialogForm中有一个标签。单击MainForm中的按钮时,dialogForm打开。 但dialogForm中的标签为空。实际上它没有时间加载。我想检查dialogForm是否已完全加载,然后进程可以在MainForm中继续。 例如: dialogForm tempFrm = new dialogForm(); tempFrm.Show(); // I want to wa
- 其中一个是主窗体(我们称之为主窗体)
- 另一个用于显示一些警告(我们称之为dialogForm)
dialogForm tempFrm = new dialogForm();
tempFrm.Show(); // I want to wait till the dialogForm is fully loaded. Then continue to "while" loop.
while(..)
{
...
}
因此,您需要使用显示的表单
事件:
tempFrm.Shown += (s, e) =>
{
while(..)
{
}
}
但你会有另一个问题。它会堵住线的。您需要在另一个线程上运行此
而循环,方法是利用BackgroundWorker
或线程
为什么不创建一个布尔值以及访问它的方法
private bool Ready = false;
public ConstructorMethod()
{
// Constructor code etc.
Ready = true;
}
public bool isReady()
{
return Ready;
}
你可以试试下面的方法
private bool Is_Form_Loaded_Already(string FormName)
{
foreach (Form form_loaded in Application.OpenForms)
{
if (form_loaded.Text.IndexOf(FormName) >= 0)
{
return true;
}
}
return false;
}
你也可以看看这个
您的while(…)会阻止UI线程,因此子窗体将永远不会收到消息,也不会被加载
为了实现目标,您应该订阅Load事件并在处理程序中继续您的代码
void Click()
{
var tempFrm = new dialogForm();
tempFrm.Load += frmLoad;
tempFrm.Show();
}
void frmLoad(object s, EventArgs ea)
{
// form loaded continue your code here!
}
调用tempFrm.Update()。在UI代码中使用长时间循环从根本上说是错误的。不要这样做。你想要的目标是什么?@Hans你的tempFrm.Update()建议解决了这个问题。顺便说一下,原始代码中没有while循环。这只是一个例子:)谢谢你的回答。如果你发布假代码,你就不会得到好的答案:(@HansPassant如果你发布你的“tempFrm.Update()”解决方案作为答案,我可以接受。这个问题几乎有1000个视图。人们可能会在这里错过你的答案。