0

我想通过检查toggleButton来启动一个过程,并在完成过程后toggleButton被取消选中。

这是我的代码。

进程.xaml:

<ToggleButton Command="{Binding StartProccessCommand}" Content="Proccessing"  IsChecked="{Binding isChecked,Mode=TwoWay}"></ToggleButton>

进程视图模型.cs:

public class ProccessViewModel: BindableBase 
{
  private bool _isChecked = false;
  public bool isChecked
  {
     get { return _isChecked; }
     set { SetProperty(ref _isChecked, value); }
  }

  public DelegateCommand StartProccessCommand{ get; set; }
  
  public ProccessViewModel()
   {
      StartProccessCommand= new DelegateCommand(OnToggleButtonClicked);
   }

  public async void OnToggleButtonClicked()
    {
       await Task.Run(() => {

          isChecked= true;
      
          for (int i = 0; i < 50000; i++)
            {
              Console.WriteLine(i);
            }

       }).ContinueWith((x) =>
           {
              for (int i = 50000; i < 100000; i++)
               {
                 Console.WriteLine(i);
               }

              isChecked= false;
           }
}

但是当我在检查后立即运行代码 ToggleButton Unchecked 时。

结果 :

ToggleButton 已选中
ToggleButton 未选中
1
2

.
49999
50000
50001

.
100000

4

1 回答 1

1

你为什么用ContinueWithwith await?这是没有意义的,因为OnToggleButtonClicked一旦 awaited 完成,其余的将被执行Task

设置属性,等待第一个Task,然后等待另一个Task并将属性设置回false

public async void OnToggleButtonClicked()
{
    isChecked = true;
    await Task.Run(() => {

        for (int i = 0; i < 50000; i++)
        {
            Console.WriteLine(i);
        }
    });

    await Task.Run(() =>
    {
        for (int i = 50000; i < 100000; i++)
        {
            Console.WriteLine(i);
        }
    });
    isChecked = false;
}
于 2021-10-12T19:21:39.473 回答