Windows窗体的“无加载完成”事件

时间:2011-08-26 12:54:27

标签: c# winforms visual-studio-2008 user-controls

在Windows窗体中单击Next我需要显示其他窗体并开始一些处理。我在.Net C#编码

问题出在表单完全可见之前,方法被触发并且处理开始并且UI看起来像是崩溃了。即使在加载控件之前,处理也已开始一旦完成处理,所有控件都可见。 enter image description here 实际输出必须是所有控件都应加载,然后必须开始处理。 enter image description here

我需要在窗体(用户控件)可见并完全加载后调用该方法开始处理。

我尝试了thisthis,但没有运气。

添加代码:

private void FeatureRemovalControl_Load(object sender, EventArgs e)
{
    pictureBox2.Image = Properties.Resources.line;
    prgbar.Value = 0;
    //code to load images and some other stuff
    StratProcess();
}

3 个答案:

答案 0 :(得分:3)

您正在从UI线程调用StartProcess(它似乎会阻止它完成)。因为WinForms重绘在该线程上发生,所以没有任何内容被绘制,并且看起来您的进程已挂起。您应该使用BackgroundWorker或其他方式异步调用StartProcess

答案 1 :(得分:2)

最好的方法是,如果你问我,将是异步开始处理,这样你就可以同时保持对UI和进程的完全控制。

http://msdn.microsoft.com/en-us/library/2e08f6yc(v=vs.71).aspx

答案 2 :(得分:0)

尝试在FormLoad事件结束时调用该方法,然后控件完成加载。如果不是这样,您可能需要执行一些检查,并可能创建一个自定义事件,当您对它已准备就绪感到满意时会触发该事件。

另一个解决方案是有一个按钮,用户必须按下该按钮才能触发处理,一旦所有内容都加载,他们只能点击

编辑:它看起来像它正在发生的原因是因为你在一个控件的加载方法中启动进程,我认为这不是最后一个加载控件,所以它开始处理在其他控件有机会加载之前。将StratProcess方法公开,然后在父表单的FormLoad方法中调用它,如下所示:

private void ParentForm_Load(object sender, EventArgs e)
{
     FeatureRemovalControl.StratProcess(); // Should it be called StartProcess instead?
}

请注意,尽管这仍然在UI线程上进行处理,因此在发生这种情况时屏幕可能会显示为“挂起”,因此我建议您将其移至后台线程,如其他人所建议的那样。