哥们,求帮忙,小弟先谢过了。
遇到一个问题,使用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);
}如果处于等待状态,即使主线程结束了,此线程也不会结束,导致进程还是处在的,
有没有关系这方面的了解的?给小弟些提示,这是什么原因?
遇到一个问题,使用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);
}如果处于等待状态,即使主线程结束了,此线程也不会结束,导致进程还是处在的,
有没有关系这方面的了解的?给小弟些提示,这是什么原因?
解决方案 »
- 将用户表里的数据全部加载到内存中,怎么样?
- C#生成的各个文件都是什么意思? 在MSDN中找不到。
- 如何获取服务器端的时间?
- combobox控件的一个疑惑问题,有兴趣的朋友可以进来看看。
- c#写的软件,用户的机器上如果没有安装.Net框架能够正常使用吗?
- datalist.item.findcontrol 问题~!懂得帮忙,不懂的顶~!
- 在C#中如何获取对方的IP?
- 高分求答案 关于浏览器的
- 在C#中如何调用SendMessage函数?
- 无法将类型“接口继承.Program”隐式转换为“接口继承.IprogramDic”。存在一个显式转换(是否缺少强制转换?)
- C#,将访问的文件直接转为全路径的方法是什么?
- c#如何拦截本机发送的http请求
线程唤醒:th.Resume();
唤醒:th.Resume();
此线程自己就占用着Win32 HANDLE,
如果是普通.NET对象的话,主线程结束后,此线程就被强行结束了
http://www.dotblogs.com.tw/yc421206/archive/2011/01/04/20574.aspx
http://kb.cnblogs.com/a/1752160/
请问:
系统的线程是否与.NET的这个线程有相同的机制呢?
即:是不是系统的线程也分前台和后台,后台线程不会阻止程序关闭呢?