C# winfrom 程序kill掉后的代码还可以执行

qqzj99 2013-05-29 10:35:30
我这两天在了解winform自动更新,但是我有一个疑问,比如,一个更新方法:
public void update()
{
System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcesses();
foreach (System.Diagnostics.Process p in ps)
{
//MessageBox.Show(p.ProcessName);
if (p.ProcessName == "WinForm")
{
p.Kill();
break;
}
}


ILog log = log4net.LogManager.GetLogger(typeof(Form1).Name);
//记录错误日志
log.Error("errordasdfwer");
}


为什么我在 p.Kill(); 方法,关掉进程的时候,后面log4g的日志代码还是能够执行?
...全文
126 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
人生导师 2013-05-30
  • 打赏
  • 举报
回复
你kill线程并不是马上就会结束进程的,这段时间当然会执行后面的代码的,你可以在kill之后 使用Thread.Sleep(1000)等待一段时间看看,等待一段时间就是使进程已经退出,看看那个代码是否会执行的
WintelZhao 2013-05-30
  • 打赏
  • 举报
回复
Kill是强制关闭进程,但是没有处理完的虽然进程已经不在,但是会被DW20.exe托管至回收完毕(我的案例是2.0 Framework)。 供参考,你看下在Kill你的WinForm以后再Kill了DWXX.exe试试。
本拉灯 2013-05-29
  • 打赏
  • 举报
回复
引用 楼主 qqzj99 的回复:
我这两天在了解winform自动更新,但是我有一个疑问,比如,一个更新方法:
public void update()
{
           System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcesses();
            foreach (System.Diagnostics.Process p in ps)
            {
                //MessageBox.Show(p.ProcessName);
                if (p.ProcessName == "WinForm")
                {
                    p.Kill();
                    break;
                }
            }

          
            ILog log = log4net.LogManager.GetLogger(typeof(Form1).Name);
            //记录错误日志
            log.Error("errordasdfwer");
}
为什么我在 p.Kill(); 方法,关掉进程的时候,后面log4g的日志代码还是能够执行?
你在Kill的时候,程序还没完全退出。方法是会继续执下去的。除非你Return

110,535

社区成员

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

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

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