gpt4 book ai didi

c# - 取消异步任务

转载 作者:行者123 更新时间:2023-11-30 21:56:45 25 4
gpt4 key购买 nike

例如我有这样的东西。当我单击第一个按钮时,它会启动异步进程,然后我单击第二个按钮,它会启动第二个进程。但是我只需要一个进程在点击每个按钮后就可以工作。如何取消其他进程?

namespace WpfApplication55
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
TestCombo TC = new TestCombo();
public MainWindow()
{
DataContext = TC;
InitializeComponent();
}

private void Button_Click(object sender, RoutedEventArgs e)
{
TC.Begin(60);
}

private void Button_Click1(object sender, RoutedEventArgs e)
{
TC.Begin(120);
}
}

public class TestCombo:INotifyPropertyChanged
{
private int someData;
public int SomeData
{
get { return someData; }
set { someData = value; RaisePropertyChanged("SomeData"); }
}

public void StartCount(int input)
{
SomeData = input;
while (input>0)
{
System.Threading.Thread.Sleep(1000);
input -= 1;
SomeData = input;
}
}

public void Begin(int input)
{
Action<int> Start = new Action<int>(StartCount);
IAsyncResult result = Start.BeginInvoke(input, null, null);
}

public event PropertyChangedEventHandler PropertyChanged;

private void RaisePropertyChanged (string info)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
}

最佳答案

我不太确定您希望 StartCount 中的 while 条件如何工作,但只要您评估新的 CancellationToken,您应该可以取消。请记住 Thread.Sleep 在休眠时不会取消。所以你可能会有最多 1 秒的延迟。

public void StartCount(int input, CancellationToken token)
{
SomeData = input;
while (input > 0 && !token.IsCancellationRequested)
{
System.Threading.Thread.Sleep(1000);
input -= 1;
SomeData = input;
}
}

IAsyncResult process;
public void Begin(int input)
{
if (process != null && !process.IsCompleted)
((CancellationTokenSource)process.AsyncState).Cancel();
Action<int, CancellationToken> Start = new Action<int, CancellationToken>(StartCount);
var cancelSource = new CancellationTokenSource();
process = Start.BeginInvoke(input,cancelSource.Token, null, cancelSource);
}

关于c# - 取消异步任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31261446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com