2015-04-14 21 views
0

这样做的问题是我在这里使用的技巧和窍门,但似乎运行在一个循环,不会给结果。我想运行一个函数,当任何一个窗体被点击任务栏上,并打开

基本上我运行一个BackgroundWorker命中一个url获取结果并将结果粘贴到一些Labels

我已经使用Form_Activated,但它只是继续运行在一个循环中,不会停止到达BackgroundWorker已完成的事件。

主要的代码块:

上的Form_Load我执行此功能,得到的结果并显示:

private void Form1_Load(object sender, EventArgs e) 
    { 
     pictureBox1.Show(); 
     if (!backgroundWorker1.IsBusy) 
     { 
      backgroundWorker1.RunWorkerAsync(); 
     } 
     else 
     { 
      MessageBox.Show("Thread already running...."); 
     } 
    } 

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
    { 
     loadData(); // scrape a URL and paste info to Labels .... 
    } 

这是它,现在用户将最小化应用程序,现在每当他打窗体应重新运行的任务栏图标与Form_Load中的相同。我希望这是有道理的,我已经能够做到这一点使用Form_Activate,但它一直在继续。

任何建议如何完成它?

+0

如果你想在表单从任务栏打开时运行代码,那么也许你可以使用getfocus事件? – maam27

+0

@ maam27没有检查那一个我会试试任何示例代码或链接 – confusedMind

+1

任何代码,请? – VMAtm

回答

2

我会存储一个布尔值来记住在最后一次FormResized事件中表单是否被最小化,然后如果是,并且表单当前未最小化,则调用您的方法。

private bool minimized = false; 

public void FormResized(object sender, EventArgs e) 
{ 
    if (this.WindowState == FormWindowState.Minimized) 
    { 
     minimized = true; 
    } 

    if (minimized && this.WindowState != FormWindowState.Minimized) 
    { 
     minimized = false; 
     MyMethod(); 
    } 
} 
+0

谢谢你根据需要完美工作。 – confusedMind

相关问题