任务不捕获击键

时间:2016-01-05 16:08:45

标签: c# keyboard task

这部分是按键/焦点问题和任务/睡眠问题我提供了一些示例代码来展示我的工作。确切的计算略有不同,需要更多的资源。此代码不起作用,因为在循环中没有键被捕获。我可以让它工作的唯一方法是在循环中放置一个MessageBox。我怎样才能做到这一点?我在考虑睡觉或做事,但我无法让它发挥作用。

    CancellationTokenSource cts;

    public async Task<bool> Execute()
    {
        globalKeyboardHook gkh = new globalKeyboardHook();
        gkh.HookedKeys.Add(Keys.Escape);
        gkh.KeyUp += new KeyEventHandler(gkh_KeyUp);

        cts = new CancellationTokenSource();

        try
        {
            bool reponses = await DoLongLoopingTask(someData,cts.Token);
            return true;
        }
        catch (OperationCanceledException)
        {
            MessageBox.Show("Stop By User");            }
        catch (Exception)
        {
            MessageBox.Show("Internal Error");
        }

        cts=null;


        return true;
    }

    void gkh_KeyUp(object sender, KeyEventArgs e) 
    {
        MessageBox.Show("Escape Pressed");
        if (cts != null)
        {
            cts.Cancel();
        }
    }

    async Task<bool> DoLongLoopingTask(List<Object> someData, CancellationToken ct)
    {
        int resultCuml=0;
        foreach (Object data in someData)
        {
            ct.ThrowIfCancellationRequested();
            resultCuml+=data*11; 
        }
        return resultCuml>1012824;
    }

我真正想要的是在后台运行时可以中断的部分代码。任务可能会或可能不是一个好的解决方案,如果其他更好的东西,我愿意改变它。

0 个答案:

没有答案