取消告诉不工作C#

时间:2017-02-21 10:26:45

标签: c# winforms asynchronous task cancellationtokensource

我正在尝试学习取消令牌,我创建了一个简单的Windows窗体应用程序来应用它。但取消按钮不会创建任何取消请求。我有两个按钮,一个用于GetRequest,另一个是取消按钮和一个等待方法。 button1用于GetRequest,button2用于取消 下面是示例代码。谢谢您的帮助。

CancellationTokenSource tokenSource; // I have this one the top of the class

异步方法

private async Task CountPrime(int start, int count)
    {
        tokenSource = new CancellationTokenSource();
        button2.Enabled = true;
        button1.Enabled = false;
        try
        {
            var result = await Task.Run(() =>
            Enumerable.Range(start, count).Count(x =>
            Enumerable.Range(start, (int)Math.Sqrt(x) - 1).All(y => x % y > 0)), tokenSource.Token);
            MessageBox.Show(result.ToString());
        }
        catch (OperationCanceledException ex)
        {

            MessageBox.Show(ex.Message, "Cancelled");
        }

        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Exception");
        }

        finally
        {
            button1.Enabled = true;
            button2.Enabled = false;
        }

    }

以下是button1(获取请求)的代码

private async void button1_Click(object sender, EventArgs e)
    {

        await CountPrime(2, 3000000);
    }

最后我有取消按钮

 private void button2_Click(object sender, EventArgs e)
    {
        tokenSource.Cancel();
        button2.Enabled = false;
    }

0 个答案:

没有答案