I want to start a proccess by checking toggleButton and after finishing proccess toggleButton be Unchecked.
Here is my code.
Proccess.xaml :
<ToggleButton Command="{Binding StartProccessCommand}" Content="Proccessing" IsChecked="{Binding isChecked,Mode=TwoWay}"></ToggleButton>
ProccessViewModel.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;
}
}
BUT when I run code ToggleButton Unchecked immediately after checking.
Result :
ToggleButton Checked
ToggleButton Unchecked
1
2
.
.
49999
50000
50001
.
.
100000
CodePudding user response:
Why are you using ContinueWith
with await
? It makes no sense since the remainder of OnToggleButtonClicked
will be executed once the awaited Task
has finished.
Set the property, await the first Task
and then await another Task
and set the property back to 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;
}