懂Delphi的C#高手请进!(100分)

  • 主题发起人 主题发起人 cking331
  • 开始时间 开始时间
C

cking331

Unregistered / Unconfirmed
GUEST, unregistred user!
C#中有没有像Delphi中的 SysUtils.Abort;功能方法?
用途:
public void TestAbort(){
TestA();
MessageBox.Show("不执行");
}
其中,TestA方法中,执行了像Delphi中的Abort后, 下面的提示框语句是不会执行的。
用return 和 Exit, Thread.Abort()都不能实现这样的效果。
 
一般来说, 我会用throw new Exception();引发一个异常, 然后在适当的地方捕捉这个异常。
 
return 就是 abort
 
看看VCL源码,
SysUtils.Abort好像也是触发了一个异常,没有仔细研究[:)]
 
我也使用 throw new Exception();
感觉相当于delphi 中 abrot
to bsense:
return应该相当于delphi的 result加exit;
 
to apiao and qqjm ,如果是 throw new Exception(), 在哪里扑捉呢? 每次调用函数的时候都要扑捉,多麻烦啊, Delphi确实是产生一个异常, 但是不用我们自己处理的。
 
看来都没看过abort
delphi的abort俗称哑异常
它的源码就写这raise EAbort.Create('');
是会终止当前的过程返回道调用者.
 
在delphi中
调用abort其实也是触发一个"operation aborted"异常.
{ Raise abort exception }
procedure Abort;
function ReturnAddr: Pointer;
asm
MOV EAX,[EBP + 4]
end;

begin
raise EAbort.CreateRes(@SOperationAborted) at ReturnAddr;
end;

你可以在应用程序这个级别截获这个异常并把它给忽略掉。
如:
你在过程中写下
throw new Exception("abort");

在main()主函数中
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new UI.Form1());
}
static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
//在这里处理你抛出abort异常
if (string.Equals(e.Exception.Message, "abort"))
{
//在这里你什么也不做,就忽略了抛出的abort异常!
//MessageBox.Show(e.Exception.Message);
}


}
}
还有什么疑问可以再提
 
兄弟回答的太妙了, 谢谢!
能留下QQ吗, 以后有问题请教下。
 
后退
顶部