我正在制作一个创建对象的C#WPF程序,该对象将在实例化时读取存储的JSON文件。像这样:
namespace CodeTester
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
data_init data = new data_init("C:\test.json")
}
}
}
data_init是读取json文件并进行解析的对象,而构造函数唯一需要的参数是文件路径。如图所示,我将其放入MainWindow构造函数中,由于某种原因我的程序将无法加载,MainWindow构造函数中出现错误,所以我知道这就是问题所在。
在哪里可以实例化此对象而不会引起错误?
感谢您的帮助!
编辑:这是我得到的错误:
Process is terminated due to StackOverflowException.
An unhandled exception of type 'System.StackOverflowException' occurred in mscorlib.dll
我尝试实现以下内容以捕获错误,如Stefan所建议的:
try
{
data_init data = new data_init("C:\test.json")
}
catch(Exception e)
{
Console.WriteLine("Error:");
Console.WriteLine(e);
}
但是似乎代码在InitializeComponent();
处失败
答案 0 :(得分:0)
您的代码可用于注释以下行吗?
// data_init data = new data_init("C:\test.json")
如果可行,则可能是您的JSON文件很大。是这样吗?
答案 1 :(得分:-1)
如果该行失败,则该行失败。您可以尝试try
catch
块,但是仍然可以;该行将失败。
一个常见的模式是使用Loaded
事件进行进一步的初始化。但是该行仍然会失败。
public MainWindow()
{
InitializeComponent();
Loaded += async (sender, args) =>
{
//initialization stuff here
};
}
正如我所说,您可能想要尝试像这样的try
catch
块:
try
{
data_init data = new data_init("C:\test.json")
}
catch(Exception e)
{
//the `e` contains information on the error.
}
但是该行仍然会失败。
注意到缺少必需的;
您的代码将始终无法编译。
因此,您可以尝试:
//note some changes
var data = new data_init(@"C:\test.json");
但是它可能会失败。
所以,我希望你会看到;如果没有实施data_init
,并且通过发布一些伪代码,我们将无济于事。
如果您想获得更好的答案,请更新您的问题并发布完整的相关代码。
仅通过将坏行放置在其他位置就不能防止其失败。有时,将其放置在错误的位置会导致由于依赖关系而导致失败。但是,在这种情况下,您没有证据表明确实如此。