2011-08-26 50 views
1

在窗体上单击下一步我需要显示其他窗体并开始一些处理。在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

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

+0

但进度条出现并似乎更新? – w69rdy

+0

是的,我知道。那是我问的。你能以某种方式暗示我吗? –

+0

是的:使用'BackgroundWorker'。 –

0

尝试调用该方法在FormLoad活动结束时,控制应该已经由然后加载完毕。如果它没有,你可能需要执行一些检查,并可能创建一个自定义事件,当你很高兴它已经准备就绪时触发。

另一个解决方案是有一个按钮,用户必须按触发处理,他们将只能点击一次一切都已经加载

编辑:的原因,它看起来就像它的发生是因为您正在使用控件的一种加载方法启动该过程,我认为这不是加载的最后一个控件,因此它在其他控件有机会加载之前开始处理。让StratProcess方法公开,并调用它的父窗体的FormLoad方法来代替,像这样:

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

要小心的是这又是做UI线程上的处理,让画面可能会出现“挂”,而这是发生的,所以我建议你像其他人所建议的那样将它移动到后台线程。

+0

我在做同样的事,但没有工作。由于它是从表单加载事件调用的,因此该方法即使在表单加载完成之前也会开始处理,因此UI受到干扰。 –

+0

用什么方法触发处理?你能发布这个代码吗? – w69rdy

+0

问题已更新 –