gpt4 book ai didi

c# - 在多个例程之间使用try-catch

转载 作者:行者123 更新时间:2023-12-03 08:35:55 25 4
gpt4 key购买 nike

尽管我现在可以提供更多代码来改进我的问题并进一步显示我在该 Realm 的麻烦,但这还是我先前提出的问题的后续工作。

我这里有三个例程。这些例程中的两个协同工作-如果成功,则将使用System.Reflection将程序集加载到内存中。如果文件未正确加载到内存中,我希望这些例程返回错误,但是由于某些原因,这些try-catch语句根本无法按我希望的方式工作。

注意:为了使该例程正常工作,文件必须是.net程序集。例如,如果文件是在VB6中编程的,则将引发错误。这是我要退还给我的错误。

private void ExecuteDataIntoMemory(string filePath)
{

byte[] bytes = File.ReadAllBytes(filePath);

try
{
ExecFile(bytes);
MessageBox.Show("successfully loaded this file into memory");
}

catch
{
MessageBox.Show("Could not load this file into memory");
}

}

private static void ExecFile(byte[] data)
{
try
{
//Work around for "SetCompatibleTextRenderingDefault"
System.Threading.Thread T = new System.Threading.Thread(ExecFile);
//Set STA to support drag/drop and dialogs?
T.SetApartmentState(System.Threading.ApartmentState.STA);
T.Start(data);
}

catch
{
MessageBox.Show("caught some error ...");
}

}
private static void ExecFile(object o)
{

System.Reflection.MethodInfo T = System.Reflection.Assembly.Load((byte[])o).EntryPoint;
if (T.GetParameters().Length == 1)
T.Invoke(null, new object[] { new string[] { } });
else
T.Invoke(null, null);


}

如果有必要,我可以澄清更多,但目前还不确定还包括哪些其他信息。

最佳答案

如果我对您的理解很好,则您仅希望ExecuteDataIntoMemory成功才能评估ExecFile

1-您正在运行一个新线程来执行ExecFile方法,该方法将在其他线程中执行。因此,首先在tryExecFile(byte[] data)块上运行不带新线程的ExecFile(data),因为您想以任何方式等待它:

try
{
ExecFile(data);
}

2-请注意,您有两个名称相同的方法'ExecFile(byte [] data)'和 ExecFile(object o),您要传递的数据来自 byte[]类型,因此它将是无限递归的,或者直到引发堆栈溢出异常为止。因此,您应该将 data转换为对象,然后将其传递给方法,即:
try
{
ExecFile((object)data);
}

3-在ExecFile(byte [] data)方法的 catch块处重新抛出异常,以便可以从调用方方法两个处处理该异常,即:
try
{
ExecFile((object)data);
}
catch
{
MessageBox.Show("caught some error ...");
throw;
}

关于c# - 在多个例程之间使用try-catch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6641687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com