Tag: 处理

在catch块中捕获exception后,是否可以再次在try块中执行代码?

我想在捕获exception后再次执行try块中的代码。 这有可能吗? 对于Eg: try { //execute some code } catch(Exception e) { } 如果捕获到exception,我想再次进入try块以“执行一些代码”并再次尝试执行它。

我什么时候需要在图形上使用dispose()?

我正在学习用C#绘制东西,我一直看到使用dispose()的建议,但我不太明白它的作用。 我什么时候应该在代码绘制的图形上使用dispose()? 如果我不这样做会怎么样? 每次图形不可见时是否需要调用它,例如在具有选项卡且用户切换到其他选项卡的GUI上,然后在切换回时重绘它? 如果我不打电话,我会打破它吗? 蝙蝠侠会逃脱小丑的邪恶魔掌吗?

C#(不是ASP / MVC / WinForms) – 捕获类中的所有exception

一些背景信息 我在一个使用专有编程语言的系统中编程,可以选择在专有代码中使用特别归属的.Net类。 不幸的是,系统没有处理从.Net代码冒出来的未处理exception,如果事实上根本没有; 系统崩溃,没有任何解释。 这很烦人,因为我们经常想要处理专有系统中的exception,而不是.Net代码。 系统供应商提供的解决方案是将exception重新打包到系统确实处理的特殊对象中。 我们的.Net代码是以façade模式编写的,问题是为了确保处理来自.Net代码的每个exception,Facade中的每个方法都必须包含一个try / catch块,它可以重新打包任何可能的exception。发生。 这个问题 我在这里阅读了很多描述类似场景的线程,其中大多数是WinForms-或与web相关。 因为我们的代码都不是,所以问题是是否有某种方法来捕获类中的所有exception,以便我们可以重新打包它并重新抛出它们的修改版本? 显然,包含类和。专有语言的.Net dll之间的接口完全超出了我们的控制范围。 编辑 我尝试了@VMAtm建议的currentDomain.UnhandledException方法,遗憾的是无济于事。 事件处理程序没有触发,父系统得到exception,然后像往常一样行为不端。 这让我再次进入谷歌,我在这里找到了这一段: 首先要理解的是UnhandledException事件不是未处理的exception“处理程序”。 注册事件,与文档说的相反:-(,不会导致未处理的exception被处理。(从那以后它们将不会被处理,但我将停止循环推理已经……)UnhandledException事件只是通知您exception未处理,以防您想要在线程或应用程序死亡之前尝试保存状态。 Jonathan Keljo,CLR Exceptions PM 这太糟糕了,我喜欢有一个“全局”try / catch块的想法。 我猜这意味着我没有成功地从父系统中隐藏exception。 因为我不知道关于如何在该系统中实现它的第一件事(坦率地说,我不知道我将如何继续自己实现它的第一件事)我和我一起真的很薄假设,所以如果有人能以任何方式纠正我,请继续! 哦,我在父系统中得到的错误是Exception has been thrown by the target of an invocation. ,据我所知,来自外部.Netexception的消息发生了。 如果可以阅读其中的任何内容,我不知道。 我也会去@jlew建议的Castle Dynamic Proxy,但它看起来比两条AppDomain线要困难得多,让我害怕得多:) 解 如果你遇到与我相同的问题,你应该首先尝试@VMAtm建议的currentDomain.UnhandledException方法,因为这是因为我的父系统特别肛门它不起作用。 我使用Castle DynamicProxy设置让它工作。 这真的很容易设置。 我的测试用例是封装XmlAttribute类的façade类。 我要做的第一件事就是编写代理类: public class AttribInterceptor : […]

杀死进程(Windows 8)问题

我已经在一个月前安装了Windows 8,并且一直遇到问题,当进程挂起时我无法结束/终止它。 任务管理器和CMD Taskkill / f / PID ####都不会完成这项工作,所以我想我会在C#中编写自己的进程杀手并查看出现的问题。 写完一个小应用程序后,我意识到我并不像我想的那么聪明 – 我仍然无法结束这个过程。 起初我能够通过名称/ PID找到进程: Process p = Process.GetProcessById(aPid) //or foreach (Process p in Process.GetProcessesByName(aProcessName) ..当我试图:并且正在获得“拒绝访问”例外: process.Kill(); ..经过一些改变的尝试,我将无法再找到这个过程。 例如。 当我试图通过名称或PID找到它时,没有返回任何内容,而该过程仍然保留在任务管理器和我的屏幕上。 我还读过Process @MSDN,它说如果进程已经终止或无法终止,可以抛出“拒绝访问”.. 🙁 救命? FORCE结束过程真的没办法吗?

如何在保持到目前为止生成的堆栈跟踪的同时重新抛出内部exception?

重复: 在C#中,如何在不丢失堆栈跟踪的情况下重新抛出InnerException? 我有一些操作,我在后台线程上异步调用。 有时,事情变坏了。 当发生这种情况时,我倾向于得到一个TargetInvocationException,这在适当的时候是非常无用的。 我真正需要的是TargetInvocationException的InnerException,如下所示: try { ReturnValue = myFunctionCall.Invoke(Target, Parameters); } catch (TargetInvocationException err) { throw err.InnerException; } 这样,我的调用者就会遇到发生的REALexception。 问题是,throw语句似乎重置了堆栈跟踪。 我想基本上重新抛出内部exception,但保留它最初的堆栈跟踪。 我怎么做? 澄清:我只想要内部exception的原因是这个类试图“抽象掉”这些函数(调用者提供的委托)在其他线程上运行的全部事实。 如果存在exception,则可能与在后台线程上运行无关,并且调用者真的喜欢进入其委托的堆栈跟踪并找到真正的问题,而不是我调用的调用。

将图像转换为字节并保存在Xml中

我需要将图像的byte []转换为可以保存在xml中的格式。 我试图转换为字符串,但没有工作。 保存5张图像后的xml文件大小约为50mb! 我需要转换为更简单的格式,这个xml文件不能太重。

是什么原因导致Winforms无声地丢弃未处理的exception(没有尝试/捕获)?

我正在为我的winforms控件添加新function,其中一部分需要一个曾经常用的变量现在是可选的(如果它为null,则从第二个源获取数据)。 我做了一些更改并运行了我的表单,但却发现没有发生任何事情,甚至是之前有效的function。 困惑我介入了代码并发现我的Winforms用户控件在遇到我的变量时抛出了NullReferenceException ,但是在UI中没有抛出任何错误。 我的设置是我有一个带有combobox的UserControl 。 当用户更改该combobox时,它会在第一个控件具有的面板中加载辅助UserControl 。 第二个控件就是抛出exception。 以下是代码路径: private void cmbActionType_SelectedIndexChanged(object sender, EventArgs e) { if (_loading) return; // ActionType was changed, update the action.ActionType value if (cmbActionType.SelectedItem != null) { if (cmbActionType.SelectedItem.ToString() == SETVALUE_OPTION) _action.ActionType = ActionTypes.SetValue; else if (cmbActionType.SelectedItem.ToString() == CHECKVALUE_OPTION) _action.ActionType = ActionTypes.CheckValue; else _action.ActionType = ActionTypes.CustomAction; } RefreshActionPanel(); _editor.DataModified(); […]

使用Process.Start运行程序时,它找不到它的资源文件

我有这个代码: private void button1_Click(object sender, EventArgs e) { Process p = new Process(); p.StartInfo.FileName = “C:/Users/Valy/Desktop/3dcwrelease/3dcw.exe”; p.Start(); } 3dcw.exe是一个用于OpenGL图形的应用程序。 问题是,当我单击按钮时,可执行文件会运行,但它无法访问其纹理文件。 有没有人有办法解决吗? 我觉得像在后台加载位图文件,然后运行exe文件,但我怎么能这样做?

捕获另一个表单抛出的exception

我正在尝试这样做: 我正在创建另一个表单,其中的FormClosed方法抛出exception,应该由主表单捕获。 主要表格: try { frmOptions frm = new frmOptions(); frm.ShowDialog(); } catch(Exception) { MessageBox.Show(“Exception caught.”); } frmOptions: private void frmOptions_FormClosed(object sender, FormClosedEventArgs e) { throw new Exception(); } 调试器在此消息的exception上停止: 用户代码未处理exception 为什么? 我正在捕获创建它的对象的所有者中的exception。 有人有想法吗?

访问被拒绝 – 尝试从地址栏的句柄获取URL(文本)时

我正在尝试从IE的地址栏中提取URL。 (使用以下C#代码在Windows 7上的IE 8)。 static string GetUrlFromIE() { IntPtr windowHandle = APIFuncs.getForegroundWindow(); IntPtr childHandle; String strUrlToReturn = “”; //try to get a handle to IE’s toolbar container childHandle = APIFuncs.FindWindowEx(windowHandle, IntPtr.Zero, “WorkerW”, IntPtr.Zero); if (childHandle != IntPtr.Zero) { //get a handle to address bar childHandle = APIFuncs.FindWindowEx(childHandle, IntPtr.Zero, “ReBarWindow32”, IntPtr.Zero); if (childHandle != IntPtr.Zero) { […]