1

我在这里的第一个问题,我的英语不太好,所以请多多包涵,

我正在编写一个应用程序,允许用户编写与“驱动程序”接口的脚本,脚本和驱动程序都是独立的类库 dll。这些类通过传递的回调委托进行通信,因此在编译时它们没有链接。

示例:(脚本)-->(处理通信的程序)-->(驱动程序)

现在我的问题是:

当脚本通过委托执行方法并抛出异常时,异常会冒泡回脚本,如果用户在 try-catch 块中捕获它,则用户可以处理它,如果没有,则必须捕获异常在我的程序里面。

它像这样工作正常,但我不知道这是否是正确的方法:

delegate object ScriptCallbackDelegate(string InstanceName, string MethodName, object[] Parameters);

static private object ScriptCallbackMethod(string InstanceName, string MethodName, object[] Parameters)
{
    try
    {
         return InterfaceWithDriver(InstanceName, MethodName, Parameters);
    }
    catch( Exception e )
    {
         try
         {
             throw;
         }
         catch
         {
             Console.WriteLine("Script did not handle exception: " + e.Message);
             return null;
         }
    }

}
4

2 回答 2

3
catch (Exception e)
{
    try
    {
        throw;
    }
    catch
    {
        Console.WriteLine("Script did not handle exception: " + e.Message);
        return null;
    }
}

在语义上等同于:

catch (Exception e)
{
    Console.WriteLine("Script did not handle exception: " + e.Message);
    return null;
}

脚本永远不会看到那个内部throw- 它被您的 C# 代码捕获。

于 2013-04-26T06:55:47.833 回答
1

在您的代码中引起的异常永远不会离开它,例如在下面您可以看到类似的行为。

using System;

namespace Code.Without.IDE
{
    public static class TryCatch
    {
        public static void Main(string[] args)
        {
            try
            {
                try
                {
                    throw new Exception("Ex01");
                }
                catch(Exception ex)
                {
                    try
                    {
                        throw;
                    }
                    catch
                    {
                        Console.WriteLine("Exeption did not go anywhere");
                    }
                }
                Console.WriteLine("In try block");
            }
            catch
            {
                Console.WriteLine("In catch block");
            }
        }
    }
}

生成以下输出:

------ C:\abhi\Code\CSharp\无 IDE\TryCatch.exe

例外没有去任何地方

在尝试块

------ 进程返回 0

于 2013-04-26T07:03:47.740 回答