簡體   English   中英

如何通過並行調用使用並行編程來一次調用多個函數?

[英]How can I use parallel programming to call more than one function at a time by using Parallel Invoke?

我有這樣的WPF應用程序。

namespace WpfApplication1
{
 /// <summary>
/// Interaction logic for MainWindow.xaml
 /// </summary>
 public partial class MainWindow : Window
 {
public delegate void NextPrimeDelegate();
int i = 0;

public MainWindow()
{
  InitializeComponent();
}

 public void CheckNextNumber()
{
  i++;
  textBox1.Text= i.ToString();
    Dispatcher.BeginInvoke(
      System.Windows.Threading.DispatcherPriority.SystemIdle,
      new NextPrimeDelegate(this.CheckNextNumber));

 }

private void button1_Click(object sender, RoutedEventArgs e)
{
  Dispatcher.BeginInvoke(
      DispatcherPriority.Normal,
      new NextPrimeDelegate(CheckNextNumber));
  }
 }

上面的代碼沒有問題,我的問題是:如何通過使用並行調用使用並行編程來一次調用多個函數?

例如:我必須做這樣的事情。

tr[0].Start();
tr[0].Stop(); 

我無法完全將您附帶的代碼示例與您的問題聯系起來,但我會回答您的問題。 Parallel.Invoke()接受一個(可變長度)lambda(內聯函數)列表作為其參數。 它並行調用/執行所有lambda,並阻止執行直到所有lambda執行完畢。 例如:

Parallel.Invoke( () => Thread.Sleep(500), () => Thread.Sleep(1500), () => Thread.Sleep(200));

這將立即調用所有這三個函數( () => ...是內聯聲明的函數,不帶任何參數,並返回隨后出現的單個表達式的結果。)和阻塞(表示執行不會繼續過去在調用者線程上指向該點),直到所有這三個函數執行完畢。 在這種情況下,Parallel.Invoke將花費1500毫秒,因為最長的運行函數是第二個函數,該函數等待1500毫秒才返回。

我不太確定您想用示例代碼來說明什么,但是如果您想並行運行Start()和Stop()(再次,實際上並不確定為什么),您可以類似於Parallel.Invoke(tr[0].Start(), tr[0].Stop())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM