哥们,求帮忙,小弟先谢过了。
遇到一个问题,使用System.Threading.Thread线程类,
执行一段代码,代码如下:        private static void OnEventLogWritten()
        {
            NotifyChangeEventLog(HEventLog, HEvent);
            HANDLE hEventLog=new HANDLE();
            while (NotifyEventLogWritten)
            {
                //HWaitHandle.WaitOne(Int32.MaxValue);//等待被系统通知
                WaitForMultipleObjects(1, new[] { HEvent }, false, Int32.MaxValue);
                var logs = EventLog.GetEventLogs(Environment.MachineName);
                var lastlogs = new List<EventLogEntry>(logs.Length);//用来保存各类日志的最新一条日 
                hEventLog = new HANDLE(-1);
                foreach (var eventLog in logs)
                {
                    //var ens = eventLog.Entries;
                    //var arr = new EventLogEntry[ens.Count];
                    //ens.CopyTo(arr, 0);
                    //Array.Sort(arr, new SortForEventLogArray());
                    //lastlogs.Add(arr[0]);                    hEventLog = OpenEventLog(null, eventLog.Log);
                    int number = -1;
                    GetNumberOfEventLogRecords(hEventLog, ref number);//不一定能准备读取,即使是System的,读取的还是Application的条数
                    if (eventLog.Entries.Count > 0)
                    {
                        var ret = eventLog.Entries[Math.Max(Math.Min(number, eventLog.Entries.Count) - 1, 0)];
                        lastlogs.Add(ret);
                    }
                }
                lastlogs.Sort(new SortForEventLogArray());//按记录时间倒序排列
                if (EventLogWritten != null)
                    EventLogWritten(lastlogs[0]);//触发事件
            }
            CloseHandle(HEvent);
            CloseHandle(hEventLog);
        }如果处于等待状态,即使主线程结束了,此线程也不会结束,导致进程还是处在的,
有没有关系这方面的了解的?给小弟些提示,这是什么原因?

解决方案 »

  1.   

    线程挂起:th.Suspend();
    线程唤醒:th.Resume();
      

  2.   

    挂起:th.Suspend();
    唤醒:th.Resume();
      

  3.   

     可能我没说明白,线程等待,是要等待Win32 CreateEvent()创建的对象的通知,
     此线程自己就占用着Win32 HANDLE,
     如果是普通.NET对象的话,主线程结束后,此线程就被强行结束了
      

  4.   

    設定 Thread.IsBackground = true 屬性就可以了,這樣主線程結束後,線程就跟著結束了。
      

  5.   

    大大你好,本人表達能力比較差,不曉得怎麼跟你解釋,但給你兩個連結,希望對大大有幫助。
    http://www.dotblogs.com.tw/yc421206/archive/2011/01/04/20574.aspx
    http://kb.cnblogs.com/a/1752160/
      

  6.   

     先结帐,再说话。
     请问:
     系统的线程是否与.NET的这个线程有相同的机制呢?
     即:是不是系统的线程也分前台和后台,后台线程不会阻止程序关闭呢?
      

  7.   

    以我的了解是沒有,一般創建使用者模式的線程是用 CreateThread 或 CreateRemoteThread 這兩個 Windows API,傳入的參數與前景背景無關,如果我有說錯,請大大多多指正,也可當作我的學習,謝謝。