当前位置:  开发笔记 > 编程语言 > 正文

从后台线程捕获异常

如何解决《从后台线程捕获异常》经验,为你挑选了1个好方法。

并发同事.

我需要能够捕获可能从后台线程抛出的异常.

让代码说明一下(这是一个糟糕的代码)

 public delegate bool CheckForUpdatesHandler(Uri uri);
    public class UpdatesChecker {
        public event AsyncCompletedEventHandler CheckForUpdatesAsyncCompleted;
        protected virtual void OnCheckForUpdatesAsyncCompleted(AsyncCompletedEventArgs args) {
            if (CheckForUpdatesAsyncCompleted != null)
                CheckForUpdatesAsyncCompleted(this, args);
        }

        public bool CheckForUpdates(Uri ftp) {            
            Thread.Sleep(1000);
            throw new Exception("bla");
            return true;
        }     


        public void CheckForUpdatesAsync(Uri ftp){            
            var action = new CheckForUpdatesHandler(CheckForUpdates);
            var c=action.BeginInvoke(ftp, delegate(IAsyncResult state) {
                OnCheckForUpdatesAsyncCompleted(new AsyncCompletedEventArgs(null, false, null));
            }, null);
        }    
    }

Marc Gravell.. 8

使用Delegate.BeginInvoke,将通过调用.EndInvoke来检索异常 - 您必须执行此操作以防止泄漏.

使用BackgroundWorker,它将出现在完成事件中

在一个香草上Thread,一个未经处理的例外将推翻这个过程.

然而,最简单的方法是:不要让它扔...

    public bool CheckForUpdates(Uri ftp) {
        try {
            Thread.Sleep(1000);
            throw new Exception("bla");
            return true;
        } catch (Exception ex) {
            // raise an event, call a method/callback, do something
        }
    }

如果您当前没有使用EndInvoke,那么可能切换到上面的模式并直接使用ThreadPool(而不是Delegate.BeginInvoke).



1> Marc Gravell..:

使用Delegate.BeginInvoke,将通过调用.EndInvoke来检索异常 - 您必须执行此操作以防止泄漏.

使用BackgroundWorker,它将出现在完成事件中

在一个香草上Thread,一个未经处理的例外将推翻这个过程.

然而,最简单的方法是:不要让它扔...

    public bool CheckForUpdates(Uri ftp) {
        try {
            Thread.Sleep(1000);
            throw new Exception("bla");
            return true;
        } catch (Exception ex) {
            // raise an event, call a method/callback, do something
        }
    }

如果您当前没有使用EndInvoke,那么可能切换到上面的模式并直接使用ThreadPool(而不是Delegate.BeginInvoke).

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有