如何使用并行编程通过并行调用一次调用多个函数

本文关键字:调用 并行 一次 函数 编程 何使用 | 更新日期: 2023-09-27 18:07:13

我有一个这样的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));
  }
 }

上面的代码工作没有问题。我的问题是:如何使用并行编程,通过使用并行调用一次调用多个函数?

例如:I have to make something like this.

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

如何使用并行编程通过并行调用一次调用多个函数

我不能将您附加的代码示例与您的问题联系起来,但我会回答您的问题。Parallel.Invoke()接受一个可变长度的lambdas(内联函数)列表作为其参数。它并行调用/执行所有lambda,并阻塞执行,直到所有lambda执行完成。例如:

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

这将一次调用所有这三个函数(() => ...是一个内联声明的函数,它不接受参数,并返回后面的单个表达式的结果)和阻塞(意味着执行将不会继续超过调用者线程的那个点),直到所有这三个函数都完成执行。在本例中是Parallel。调用将花费1500毫秒,因为运行时间最长的函数是第二个函数,它在返回之前等待1500毫秒。

我不太确定你想用你的示例代码说明什么,但如果你想并行运行Start()和Stop()(再次,不明白为什么你会),你可以做一些像Parallel.Invoke(tr[0].Start(), tr[0].Stop())