C# 如何使用事件作为任务并行库中的触发器启动或继续任务

C# 如何使用事件作为任务并行库中的触发器启动或继续任务,c#,wpf,multithreading,task-parallel-library,task,C#,Wpf,Multithreading,Task Parallel Library,Task,这是我在这里的第一篇帖子,请让我知道我是否在遵循规则的同时以正确的方式提出了我的问题 我最近开始学习c#,偶然发现了使用MVVM在WPF中实现多线程的TPL。 网格绑定到ViewModel中的ObservableCollection,如图所示 第一列是stepnumber,第二列是复选框(我想用它作为进入下一步的等待条件),第三列是time,第四列是function call。我试图编写以下逻辑代码 步骤1线程从0秒开始并调用相应的函数A 5秒(0+5)后,第2步线程启动并调用相应的函数B 1

这是我在这里的第一篇帖子,请让我知道我是否在遵循规则的同时以正确的方式提出了我的问题

我最近开始学习c#,偶然发现了使用MVVM在WPF中实现多线程的TPL。 网格绑定到ViewModel中的ObservableCollection,如图所示

第一列是stepnumber,第二列是复选框(我想用它作为进入下一步的等待条件),第三列是time,第四列是function call。我试图编写以下逻辑代码

步骤1线程从0秒开始并调用相应的函数A

5秒(0+5)后,第2步线程启动并调用相应的函数B

15秒(5+10)后,第3步线程启动并调用相应的函数C

现在,由于在步骤4旁边有一个复选框,所以我必须等待某个事件(跟踪另一个线程中的信号,并查找是否满足阈值),或者等待最长的超时时间,然后继续执行其余步骤

我使用以下逻辑创建了任务(仅限代码剪切)

目前,我无法确定在第4步等待触发事件时应该使用什么,并继续执行其余步骤

编辑:

我仍在试图弄清楚如何知道选中了哪个复选框,因此同时通过定义以下交互行为来找到选中的行项目(通过设置SelectionMode=“Single”,它将允许用户只选择一列),我手动选择第四行

<telerik:RadGridView x:Name="MyGrid" SelectionMode="Single" SelectedItem=" {Binding SelectedDataGrid,Mode=TwoWay}" AutoGenerateColumns="False"  ItemsSource="{Binding MyCollection}"  NewRowPosition="Bottom" GroupRenderMode="Flat" HorizontalAlignment="Stretch" VerticalAlignment="Top" Height="353" Width="400" Margin="563,7,37,0" >
<i:Interaction.Behaviors>
<pressure:MyMultiSelectBehavior SelectedItems="{Binding SelectedItems,Source={StaticResource myViewModel}}"/>
</i:Interaction.Behaviors>
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn Header="Step Number" DataMemberBinding="{Binding StepNumber, Mode=TwoWay}"></telerik:GridViewDataColumn>
<telerik:GridViewCheckBoxColumn Header="Checkbox" DataMemberBinding="{Binding IsActive}" AutoSelectOnEdit="True" EditTriggers="CellClick" />
<telerik:GridViewDataColumn Header="Time" DataMemberBinding="{Binding StepTime, Mode=TwoWay}"></telerik:GridViewDataColumn>
<telerik:GridViewDataColumn Header="Function Call" DataMemberBinding="{Binding MyFunctionCall, Mode=TwoWay}"></telerik:GridViewDataColumn>
</telerik:RadGridView.Columns>
</telerik:RadGridView>

任何关于解决这个问题的想法或资源都会对我很有帮助。如果需要更多详细信息,请告诉我。

一个基本解决方案将使用while(!var){}调用,直到所说的“var”设置为true,这意味着它可以继续。正如你所看到的,我对异步计算并不十分了解,我能给出的唯一提示是,也许其他人知道一个更实用的解决方案。请告诉我们当你更改复选框值时会发生什么情况(即,你正在使用什么事件/绑定)@slawekwin我添加了更多代码,我希望这些代码能够解释我在选择行时是如何找到的(例如4个). SelectedDataGrid具有StepNumber属性,我打算使用该属性获取所选步骤编号的索引。
<telerik:RadGridView x:Name="MyGrid" SelectionMode="Single" SelectedItem=" {Binding SelectedDataGrid,Mode=TwoWay}" AutoGenerateColumns="False"  ItemsSource="{Binding MyCollection}"  NewRowPosition="Bottom" GroupRenderMode="Flat" HorizontalAlignment="Stretch" VerticalAlignment="Top" Height="353" Width="400" Margin="563,7,37,0" >
<i:Interaction.Behaviors>
<pressure:MyMultiSelectBehavior SelectedItems="{Binding SelectedItems,Source={StaticResource myViewModel}}"/>
</i:Interaction.Behaviors>
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn Header="Step Number" DataMemberBinding="{Binding StepNumber, Mode=TwoWay}"></telerik:GridViewDataColumn>
<telerik:GridViewCheckBoxColumn Header="Checkbox" DataMemberBinding="{Binding IsActive}" AutoSelectOnEdit="True" EditTriggers="CellClick" />
<telerik:GridViewDataColumn Header="Time" DataMemberBinding="{Binding StepTime, Mode=TwoWay}"></telerik:GridViewDataColumn>
<telerik:GridViewDataColumn Header="Function Call" DataMemberBinding="{Binding MyFunctionCall, Mode=TwoWay}"></telerik:GridViewDataColumn>
</telerik:RadGridView.Columns>
</telerik:RadGridView>
public MyDataGrid SelectedDataGrid
  {
   get { return this.selectedDataGrid; }
   set
    {
   if (this.selectedDataGrid != value)
      {
     this.selectedDataGrid = value;
     this.OnPropertyChanged("SelectedDataGrid");
      }
    }
  }