请问为什么程序在这里不继续执行也不报错呢?

snfdf 2016-04-16 09:38:37

private void frmMain_Load(object sender, EventArgs e)
{
//我的文档
string document = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
DirectoryInfo diDocument = new DirectoryInfo(document);
TreeNode tnDocument = new TreeNode(diDocument.FullName);
GetDir(tnDocument);

//我的电脑
foreach (DriveInfo driver in DriveInfo.GetDrives())
{
if (driver.DriveType == DriveType.Fixed)
{
TreeNode tnDisk = new TreeNode(driver.Name);
tnDisk.ImageKey = "disk.png";
tnDisk.SelectedImageKey = "disk.png";
tvwTree.Nodes[1].Nodes.Add(tnDisk);
GetDir(tnDisk);
}
}
tvwTree.Nodes[1].Expand();
}

private void GetDir(TreeNode tn)
{
if (tn.Nodes.Count == 0)
{
DirectoryInfo directory = new DirectoryInfo(tn.FullPath);
}
}


我在调试的时候发现,当程序执行到GetDir(tnDocument);时进入GetDir,然后 执行完DirectoryInfo directory = new DirectoryInfo(tn.FullPath);这句时就不再往下执行了,程序界面就显示出来了.后来发现在这里不能使用参数tn,写别的都可以.请问这是怎么回事呢?
...全文
366 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
snfdf 2016-04-17
  • 打赏
  • 举报
回复
引用 4 楼 Forty2 的回复:
[quote=引用 3 楼 snfdf 的回复:] ...但是运行后不报错,只是运行到错误的那句后面的语句都不执行了.有哪位高手知道这是怎么回事?
这是一个已知的微软问题,就我所知目前还没有解决。你可以手动的在Frm_load里面捕获异常,并MessagBox显示用于调试。
private void frmMain_Load(object sender, EventArgs e)
{
   try
   {
      // 你的代码段
   }
   catch(Exception e)
   {
       MessageBox.Show(e.Message);
   }
}
具体的说,托管代码创建一个具体的FrmMain Window时 ,需要调用操作系统的本地代码,而本地代码反过来调用frmMain_Load。由于某些微软声称的特殊原因,frmMain_Load里的异常无法穿透本地代码,再回到托管代码中。最后的结果就是异常被吃掉了。 你有兴趣的话,可以搜索”OnLoad exception disappeared“,可能可以看到微软的DotNet团队和操作系统团队就此问题互相指责的故事。 [/quote] 原来还有这么一说,知道了,谢谢.
Forty2 2016-04-17
  • 打赏
  • 举报
回复
引用 3 楼 snfdf 的回复:
...但是运行后不报错,只是运行到错误的那句后面的语句都不执行了.有哪位高手知道这是怎么回事?
这是一个已知的微软问题,就我所知目前还没有解决。你可以手动的在Frm_load里面捕获异常,并MessagBox显示用于调试。
private void frmMain_Load(object sender, EventArgs e)
{
   try
   {
      // 你的代码段
   }
   catch(Exception e)
   {
       MessageBox.Show(e.Message);
   }
}
具体的说,托管代码创建一个具体的FrmMain Window时 ,需要调用操作系统的本地代码,而本地代码反过来调用frmMain_Load。由于某些微软声称的特殊原因,frmMain_Load里的异常无法穿透本地代码,再回到托管代码中。最后的结果就是异常被吃掉了。 你有兴趣的话,可以搜索”OnLoad exception disappeared“,可能可以看到微软的DotNet团队和操作系统团队就此问题互相指责的故事。
snfdf 2016-04-17
  • 打赏
  • 举报
回复
谢谢,我知道问题出在哪了,是路径不对. 但是现在的问题是我的VS2015不报错了,我刚才写了一个明显的错误,把一个TreeNode指向一个TreeView不存在的节点上,但是运行后不报错,只是运行到错误的那句后面的语句都不执行了.有哪位高手知道这是怎么回事?
snfdf 2016-04-17
  • 打赏
  • 举报
回复
引用 1 楼 lovelj2012 的回复:
//
        // 摘要:
        //     设置从根树节点到当前树节点的路径。
        //
        // 返回结果:
        //     从根树节点到当前树节点的路径。
        //
        // 异常:
        //   System.InvalidOperationException:
        //     此节点未包含在 System.Windows.Forms.TreeView 中。
        [Browsable(false)]
        public string FullPath { get; }
至于为什么发生异常,上面解释的很清楚了~ 你的tnDocument不是TreeView的节点,而是孤零零的一个对象,当然发生异常咯
谢谢,我把tnDocument加到了TreeView上,现在tnDocument的问题解决了. 但是下面tnDisk都是加到了TreeView上了,tvwTree.Nodes[1].Nodes.Add(tnDisk);,为什么执行到这还是不行呢?
江南小鱼 2016-04-16
  • 打赏
  • 举报
回复
//
        // 摘要:
        //     设置从根树节点到当前树节点的路径。
        //
        // 返回结果:
        //     从根树节点到当前树节点的路径。
        //
        // 异常:
        //   System.InvalidOperationException:
        //     此节点未包含在 System.Windows.Forms.TreeView 中。
        [Browsable(false)]
        public string FullPath { get; }
至于为什么发生异常,上面解释的很清楚了~ 你的tnDocument不是TreeView的节点,而是孤零零的一个对象,当然发生异常咯

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧