C#在出现未处理的异常时忽略

本文关键字:异常 未处理 | 更新日期: 2023-09-27 17:59:57

    public void countdown()
    {
        label1.Text = "0";
        label2.Text = "4";
        label3.Text = "59";
        h = Convert.ToInt32(label1.Text);
        m = Convert.ToInt32(label2.Text);
        s = Convert.ToInt32(label3.Text);
        label1.Text = "0";
        label2.Text = "4";
        label3.Text = "59";
        timer1.Start();
    }
    private void timer1_Tick_1(object sender, EventArgs e)
    {
        string hh = Convert.ToString(h);
        string mm = Convert.ToString(m);
        string ss = Convert.ToString(s);
        label1.Text = hh;
        label2.Text = mm;
        label3.Text = ss;
        s = s - 1;
        if (s == -1)
        {
            m = m - 1;
            s = 59;
        }
        if (m == -1)
        {
            h = h - 1;
            m = 59;
        }
        if (h == 0 && m == 0 && s == 0)
        {
            timer1.Stop();
            MessageBox.Show("Times up! You lost");
            string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            string path2 = "''Puzzle";
            string fullpath = path + path2;
            DirectoryInfo di = new DirectoryInfo(fullpath);
                foreach (FileInfo file in di.GetFiles())
                {
                    file.Delete();
                }
                foreach (DirectoryInfo dir in di.GetDirectories())
                {
                    dir.Delete(true);
                }
        }
    }

所以我正在制作一个迷你游戏(这里只有倒计时计时器(,你可以选择文件,然后它们会进入你桌面上一个名为Puzzle的文件夹,你有5分钟的时间完成一个随机的谜题,如果你不这样做,它会删除文件夹中的所有文件。这可能看起来很愚蠢,但我和我最好的朋友玩了很多这样的游戏。无论如何,我的问题是:我注意到,如果它试图删除其中一个文件,但由于该文件已打开而失败,它会出现未处理的异常,并且不会删除其余文件。我是否可以让它忽略未处理的异常,并忽略该异常继续删除其他文件?抱歉收到这么多短信。

C#在出现未处理的异常时忽略

用try-catch包装您的代码:

try {
   // Put delete logic here
}
catch {
  // Do nothing
}

这是可行的,但更好的做法是捕获特定的异常类型。由于可以抛出各种类型的异常,因此最好只忽略您预期的特定异常。例如,当C#试图删除某个文件时,如果该文件正在使用中,则抛出一个IOException

catch (IOException ex) {
   // Do nothing
}

将用于删除try-catch块中文件的代码包装起来,在catch中不执行任何操作。

try
{
   file.Delete();
}
catch (IOException e)
{
   // do nothing
}

对目录也执行try-catch块。