C# 等待Winform UserControl加载

C# 等待Winform UserControl加载,c#,winforms,user-controls,infopath,C#,Winforms,User Controls,Infopath,我有一个自定义Winform Infopath用户控件,用于从sharepoint库加载表单。我有一系列函数调用,在打开表单后,从表单中提取一些数据,甚至还有一个截图函数。但是表单加载需要很多时间,其他函数完成得太快,比表单加载早很多,这给了我错误的结果 我是否可以使用wait函数,在调用其他函数之前等待infopath表单完成加载?(在c#中) --更新 示例代码: 在UserControl内部,我有一个表单初始化函数,它基本上加载表单 public void InitializeInfoPa

我有一个自定义Winform Infopath用户控件,用于从sharepoint库加载表单。我有一系列函数调用,在打开表单后,从表单中提取一些数据,甚至还有一个截图函数。但是表单加载需要很多时间,其他函数完成得太快,比表单加载早很多,这给了我错误的结果

我是否可以使用wait函数,在调用其他函数之前等待infopath表单完成加载?(在c#中)

--更新

示例代码:

在UserControl内部,我有一个表单初始化函数,它基本上加载表单

public void InitializeInfoPathForm(string myurl)
        {
            if (this.IsInitialized) return;

            CreateForm(new Uri(myurl),null);
        }

public void CreateForm(
            Uri formUrlName,
            Stream dataStream)
        {
            TestInitialization();

            try
            {
                this.formControl.Close();

                // Open / create a form
                if (dataStream != null)
                    formControl.Open(
                        formUrlName.ToString()
                        );
                else
                {
                    formControl.Open(
                        formUrlName.ToString());
                }
                RefreshView(UIStatesForm.DocumentReadMode);
                }
            catch (Exception)
            {
                RefreshView(UIStatesForm.NoDocumentAvailable);

                throw;
            }
        }
Winform如下所示:

public partial class Form1 : Form    
{    
     public Form1(string sharepoint_url)    
     {    
        InitializeComponent();

         this.infoPathUserControl1.InitializeInfoPathForm(sharepoint_url);
         takescreenshot();         
     }
}
我尝试将takescreenshot()放入Form1_加载和Form1_显示的EventHandler中,但屏幕截图的出现时间仍然比表单加载早得多,因为FormControl.Open()需要花费大量时间。我可以把屏幕截图功能放在一个按钮点击事件中,但我想自动化这个过程。我甚至试着将它放在button\u click过程中,并从Form\u Load eventhandler调用button.PerformClick


请注意。

您可以定义bool并将其设置为false,在加载infopath后,将其设置为true,只有在这种情况下,才能在表单构造函数中启动
初始化\u组件。或者类似的事情

您使用事件
UserControl.Activated
来实现此目的

UserControl1.Activated += new EventHandler(SeriesOfFunctions);
然后用这个
系列函数编写代码


您还有其他选择,如
UserControl.Load
UserControl.Activating

如果我正确理解了您的问题,那么您似乎遇到了一种竞争条件,任务在不同的线程上执行


如果你能。。。我会使用表单的On_Load函数;但是,如果您需要使用单独的线程来提高速度,以便后台任务不必在启动前等待表单,请查看。一旦事件正确加载,您可以在事件上设置form.on_load事件调用。

您可以发布一些示例代码来帮助说明您的问题吗?订阅表单显示的事件。将“其他函数”放入事件处理程序中。