首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >BackgroundWorker超时

BackgroundWorker超时
EN

Stack Overflow用户
提问于 2012-07-03 14:29:16
回答 2查看 9.2K关注 0票数 5

我在我的WPF应用程序中使用了。

如何将超时设置为BackgroundWorker

EN

回答 2

Stack Overflow用户

发布于 2012-07-03 14:32:26

我的建议如下

backgroundworker1做这项工作-它接受取消,这样你就可以让它停止。

backgroundworker2在超时挂起时执行一个循环,并在超时时完成。

如果backgroundworker1仍在运行,则该BackgroundWorkerRunWorkerComplete将关闭backgroundworker1..

这也应该接受cancellation,这样如果backgroundworker1完成并且仍然在运行,您可以取消它。

票数 4
EN

Stack Overflow用户

发布于 2012-07-03 14:57:10

BackgroundWorker不直接支持超时,但它确实支持取消。如果正在完成的工作是一个循环或其他结构,您可以定期检查CancellationPending成员,然后中止,这将很好地工作。您需要一些其他的东西来告诉后台工作人员在超时后取消。这里我使用了一个动作的异步调用。

代码语言:javascript
运行
复制
    static void Main( string[] args )
    {
        var bg = new BackgroundWorker { WorkerSupportsCancellation = true };
        bg.DoWork += LongRunningTask;

        const int Timeout = 500;
        Action a = () =>
            {
                Thread.Sleep( Timeout );
                bg.CancelAsync();
            };
        a.BeginInvoke( delegate { }, null );

        bg.RunWorkerAsync();

        Console.ReadKey();
    }

    private static void LongRunningTask( object sender, DoWorkEventArgs eventArgs )
    {
        var worker = (BackgroundWorker)sender;
        foreach ( var i in Enumerable.Range( 0, 5000 ) )
        {
            if ( worker.CancellationPending )
            {
                return;
            }
            else
            {
                //Keep working
            }
        }
    }

如果这并不符合您想要完成的任务,您可能会对在Implementing a timeout on a function returning a valueImplement C# Generic Timeout中找到的通用超时解决方案感兴趣。您可以在BackgroundWorker内部使用这些。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11313122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档