button1_click()
{
pro_test(false);//执行函数
}
pro_test(bool isboot)
{
if(isboot) sleep(15000);
...}
在form的load 最后调用 pro_test();但这时候界面都没有完全显示出来,我是要在界面显示出来后,自动执行一个函数,该如何做呢?

解决方案 »

  1.   

     
    private void Form1_Activated(object sender, EventArgs e)
        {
            pro_test();
        }
      

  2.   

    用线程啊,窗体做窗体的事,线程做线程的事实在不行int start = Environment.TickCount;
    while(Environment.TickCount - start< 5000)//5秒之后做pro_test();
    {  }
    pro_test();
      

  3.   

    我的兩種方法
    1.用線程
    2.用Timer控件
    其實都是多線程
      

  4.   

    我现在就是用timer。
     在form的load最后执行这样一个函数:   SetStartRunTimer();
            
            Timer runTimer = null;
            private void SetStartRunTimer()
            {
                runTimer = new Timer();
                runTimer.Interval = 1000;
                runTimer.Tick += new EventHandler(Checkrun);
                runTimer.Enabled = true;
            }         private void Checkrun(object sender, EventArgs e)
             {
                 try
                 {
                     int rtn1 = DllInit();
                     if (rtn1 == 0 )
                     {
                         runTimer.Enabled = false;
                         Thread.Sleep(2000);
                         Startwork();
                     }
                     else
                     {
                         btnStartRun.Enabled = false;
                         //MessageBox.Show("初始化解调仪失败!");
                         return;
                     }
                 }
                 catch (Exception ex)
                 {                 MessageBox.Show(ex.Message);
                 }
             }
    但还有一个 int rnt = SendParaData();如果放进去rnt都不会为0,但是我手动点开始运行的话 rnt就为0,正确的结果就应该为0;好像上面执行的时候form 还没有完全load完成。只要form完全load完了,SendParaData()函数才能执行成功
      

  5.   

    如果真是这样的话,还是执行的时机过早,那么还是使用Activated事件比较合适,至于说重复执行的问题,就象前面有人说的那样,可以使用标志来判断
      

  6.   

    load方法也是每次有回发事件必执行的!
      

  7.   

    我觉得用线程是有问题的,还是用timer