【问题标题】:No Load Complete event for windows formWindows 窗体的无加载完成事件
【发布时间】:2011-08-26 12:54:26
【问题描述】:

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

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

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

我尝试了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();
}

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 是的,我知道。这就是我要问的。你能给我一些建议吗?
    • 是的:使用BackgroundWorker
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      尝试在FormLoad 事件结束时调用该方法,此时控件应该已经完成加载。如果还没有,您可能需要执行一些检查,并可能创建一个自定义事件,当您对它准备好感到高兴时触发该事件。

      另一种解决方案是设置一个按钮,用户必须按下该按钮才能触发处理,只有在所有内容加载完毕后才能点击该按钮

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

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

      请注意,尽管这仍在 UI 线程上进行处理,因此屏幕可能会在此过程中出现“挂起”,因此我建议您按照其他人的建议将其移至后台线程。

      【讨论】:

      • 我在做同样的事情,但没有工作。由于它是从表单加载事件中调用的,因此该方法甚至在表单加载完成之前就开始处理,因此 UI 会受到干扰。
      • 你用什么方法触发处理?你能把这段代码贴出来吗?
      猜你喜欢
      • 2010-09-28
      • 1970-01-01
      • 2012-10-21
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多