2011-05-24 44 views
0

我需要从一个点击事件检测过程已完成,而不延迟主要WPF过程..WPF探测点击事件没有完成延迟的主过程

我不想

public void click_event(object sender,routedeventargs) 
{ 
     <launch a bunch of threads> 
     while(<threads.are alive>); 


     <code for what i want to do after threads are done> 
} 

public void threadtask() 
{} 
什么

什么,我只是做了

public void click_event() 
    { 
     foreach(<thread>) 
      <give thread task and start() each> 
    } 
    } 

但是当线程,这将无法检测完成..需要帮助在这里。谢谢。

+0

你能否详细说明一下?你的问题不是很清楚...... – 2011-05-24 21:18:53

回答

1

你问了两个不同的东西。你希望主线程不被阻塞,但是当其他线程完成时(你必须等待),你想做一些事情。考虑从一个新线程开始线程,然后让其他线程完成工作。事情是这样的:

public void click_event() 
{ 
    <start new thread> 
     <foreach(thread in threads)> 
      <do work> 
     <join threads> 
     <do your work here> 
} 

因此,所有的工作都是在不同的线程,即使是工作,你想以后做。鉴于此,您是否需要多个工作线程?

+0

是的..我需要几个工人..让我检查出来.. – 2011-05-24 21:51:08

+0

工程就像一个魅力..将可能升级它启动线程后台工作稍后.. 谢谢.. – 2011-05-25 10:28:50

1

Check out this article

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     this.ClickMe.Click += new RoutedEventHandler(ClickMe_Click); 
    } 

    void ClickMe_Click(object sender, RoutedEventArgs e) 
    { 
     BackgroundWorker bw = new BackgroundWorker(); 
     bw.DoWork += (workSender, workE) => 
     { 
      string argument = (string)workE.Argument; 
      // argument == "Some data" 
      System.Threading.Thread.Sleep(2000); 
     }; 

     bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted); 
     bw.RunWorkerAsync("Some data"); 
    } 

    void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
    { 
     this.ResultsTextBlock.Text = "I'm done"; 
    } 

} 
+0

谢谢,但我需要检测到所有线程都已完成。不只是一个。 – 2011-05-24 21:53:31

+0

你的所有线程都在做同样的事情(执行相同的方法)还是他们有不同的任务?您可以开始一个计数并减少每个线程完成的计数并检查计数== 0,或者如果他们做了不同的事情,您可以设置一个枚举标志。或者,如果您实施生产者/消费者,则创建一个填充了线程结果的对象并检查对象是否完成。 – Jay 2011-05-24 21:57:55

+0

是的..相同的任务..让我检查出来.. – 2011-05-25 09:48:02