想在控制台做个类似WINFORM里的Closed事件来杀死线程。

解决方案 »

  1.   

    控制台就是调用cmd。。什么意思?
      

  2.   

    WINFORM能做的事情,编译成控制台的程序也能做。
      

  3.   

    Process[] SysProcess = Process.GetProcessesByName("进程名");
    foreach (System.Diagnostics.Process p in SysProcess)
    {
         p.Kill();
    }
      

  4.   

    控制台有Closed事件吗?控制台怎样杀死线程? 控制台的程序结束后会自动退出,线程关闭用Abort();===========================================================
    想在控制台做个类似WINFORM里的Closed事件来杀死线程。
    Process[] SysProcess = Process.GetProcessesByName("进程名");
    foreach (System.Diagnostics.Process p in SysProcess)
    {
         p.Kill();
    }
    这段你已经看清楚了,是“进程名”,不是线程,
    结束线程就是Abort();如果你的线程是一个循环,可以控制该循环,比如
    threadstatus=true;
    while(threadstatus)
    {
       .............
    }想结束的时候
    threadstatus=false;
      

  5.   

    Close不是杀死进程~~~,杀死进程如 wangsaokui(无间道III(MSMVP)) 兄说的
      

  6.   

    引用 System.Windows.Forms.Application.Exit(); 也可以。
    要杀线程的话同 wangsaokui(无间道III(MSMVP)) 。
      

  7.   

    巨汗,控制台关闭事件?那是你的进程被Kill掉了吧,因为控制台程序是不能点叉关闭的哈,点叉关闭就是结束任务。。你可以试试这样,不负责任的代码:static void Main()
    {
      try
      {
        //代码写在这里。
      }
      finally
      {
        //关闭事件。
      }
    }
      

  8.   

    using System;
    using System.Runtime.InteropServices;
    using System.Threading;
    using System.Diagnostics;namespace 测试控制台关闭信息
    {
    public delegate bool ConsoleCtrlDelegate(int dwCtrlType);
    /// <summary>
    /// Class1 的摘要说明。
    /// </summary>
    class Class1
    {
    //The SetConsoleCtrlHandler function adds or removes an application-defined HandlerRoutine function 
    //from the list of handler functions for the calling process.
    [DllImport("kernel32.dll")]
    private static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate HandlerRoutine,bool Add);
    //一個Ctrl + C的信號被接收,該信號或來自鍵盤,或來自GenerateConsoleCtrlEvent 函數
    private const int CTRL_C_EVENT = 0;
    //一個 Ctrl + Break 信號被接收,該信號或來自鍵盤,或來自GenerateConsoleCtrlEvent 函數
    private const int CTRL_BREAK_EVENT = 1;
    //當用戶系統關閉Console時,系統會發送此信號到此
    private const int CTRL_CLOSE_EVENT = 2;
    //當用戶退出系統時系統會發送這個信號給所有的Console程序。該信號不能顯示是哪個用戶退出。
    private const int CTRL_LOGOFF_EVENT = 5;
    //當系統將要關閉時會發送此信號到所有Console程序
    private const int CTRL_SHUTDOWN_EVENT = 6;
    /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
    //
    // TODO: 在此处添加代码以启动应用程序
    //
    Class1 cl=new Class1();
    }public Class1()
    {
    ConsoleCtrlDelegate newDategate=new ConsoleCtrlDelegate(HandlerRoutine);
    bool re=SetConsoleCtrlHandler(newDategate,true);
    if(re)
    {
    Console.WriteLine("Set SetConsoleCtrlHandler success!!");
    }
    else
    {
    Debug.WriteLine("Set SetConsoleCtrlHandler Error!!");
    }
    Console.ReadLine();
    }bool HandlerRoutine(int CtrlType)
    {
    switch(CtrlType)
    {
    case CTRL_CLOSE_EVENT:
    Console.Writeln("程序正在关闭..关闭线程");
    //做关闭线程的操作
    //需要注意的一点,在C#程序使用此API,系统只等待1秒的时间,如果你一秒内不执行完这些代码也没有办法
    break;
    }
    return false;
    }
    }
    }
      

  9.   

    楼主的意思是获取控制台在关闭时的事件,并在此事件中杀死线程!!因为在控制台程序中使用线程,如果线的IsBackground属性不设为True,控制台程序是长时间运行的,在运行过程中,如果用户点击关闭按钮关闭控制台程序!因为这时Console程序默认是没有Closeing事件的,所以无法知道Console程序几时被关闭,而线程的IsBackground属性也不设为True的话,就是做成程序无法关闭的情况!因为主线程被关闭了,但其它线程还在跑!!用我上面提到的API来获取关闭事件,但也只能有1秒钟的时候去处理保存数据和关闭线程的工作,这明显是不够的,这也许是控制台程序的不足之处!!所以控制台程序还是不适合做长期运行的程序