Spiga
Posts - 87, Articles - 2, Comments - 184
Cnblogs
Dashboard
Login
Home
Contact
Gallery
RSS
Haozes's Tech Space
人類的全部才能無非是時間和耐心的混合物
.Net 2 Tip :捕获CSE和Thread.Timer与Thread.Sleep比较
2011-09-27 17:23 by Haozes, 60 visits,
收藏
,
编辑
在.Net如何捕获 AccessViolationException
在.net4.0 中,系统某些SEH异常默认是不被捕获的,该类异常称作
Corrupted State Exceptions (CSE)
比如:调用非托管代码时,常常会出现此类错误,如"内存不可读/写".
MS的MSDN有篇文章详细介绍了CSE异常:
http://msdn.microsoft.com/en-us/magazine/dd419661.aspx#id0070035
MS不推荐,捕获此类异常,因为此类异常不解决,应用可能会导致更严重的错误.建议重启该应用程序.出现此类异常的原因,往往需要解决.而不是简单的的捕获.所以.NET4.0中不让捕了(早干啥去了,到.NET才这样处理).但有些时候,我们的确要捕获此类异常,或者说调用的是第三方的库.我们根本无法彻底解决这种问题. .NET4.0 提供了如下的方法捕获:
// This program runs as part of an automated test system so you need
// to prevent the normal Unhandled Exception behavior (Watson dialog).
// Instead, print out any exceptions and exit with an error code.
[HandleProcessCorruptedStateExceptions]
public static int Main()
{
try
{
// Catch any exceptions leaking out of the program CallMainProgramLoop();
}
catch (Exception e)
// We could be catching anything here
{
// The exception we caught could have been a program error
// or something much more serious. Regardless, we know that
// something is not right. We'll just output the exception
// and exit with an error. We won't try to do any work when
// the program or process is in an unknown state!
System.Console.WriteLine(e.Message);
return 1;
}
return 0;
}
使用Timer还是Thread.Sleep
当你需要间隔一段时间执行一个方法时.你是否在方法1,和方法2中悱徊?
方法1.
Thread thread = new Thread(() => {
Thread.Sleep(millisecond);
action();
});
thread.IsBackground = true;
thread.Start();
方法2:
Timer timer = new Timer(o => action(), null, millisecond, -1);
如果你仅仅是需要间断一段时间执行一个方法.推荐使用timer.
下面MS MVP 严重批评了使用Thread.Sleep.
http://msmvps.com/blogs/peterritchie/archive/2007/04/26/thread-sleep-is-a-sign-of-a-poorly-designed-program.aspx
此人认为如果你在代码中使用thread.sleep.说明该代码设计是糟糕的.
Thread.Sleep 的应用场景只有在测试和Debug时需要模拟一个操作的执行时间.
1). 使用Thread的开销很大,大概需要200,000 cpu周期去创建一个线程, 100,000 个周期去销毁.timer的方法是进程内部的线程池的线程.这也是使用 ThreadPool.QueueUserWorkItem优于new 一个thread的地方.
2).thread.sleep 无法解决问题,只会让问题更难以重现.
2).其次创建一个线程后,比如关闭窗体,这个线程在退出时需要显示强行退出.也很不方便.相反使用timer
绿色通道:
好文要顶
关注我
收藏该文
与我联系
Categories:
.NET
注册用户登录后才能发表评论,请
登录
或
注册
,
返回博客园首页
。
首页
博问
闪存
新闻
园子
招聘
知识库
最新IT新闻
:
·
iPhone 5四大猜想:泪珠状 带LED苹果标识
·
当当网Q4整体亏损1.3亿元 上年同期净利润1480万元
·
把孩子培养成为合格Geek的七个方法
·
担心网购的衣服不合身? 创业公司Clothes Horse用“问答”就能解决你的难题
·
评价社交媒体活动ROI的三个精确指标
»
更多新闻...
最新知识库文章
:
·
编程的艺术:漂亮的代码和漂亮的软件
·
GIT分支管理是一门艺术
·
编程:是一门艺术
·
编程是一门艺术吗?
·
对Java初学者的忠告
»
更多知识库文章...
China-pub 2011秋季教材巡展
China-Pub 计算机绝版图书按需印刷服务
About
ID:Haozes
生日:1986 白羊座
目前居住地:安徽.合肥
联系方式:
Profile:
Google Profile
订阅:
有事请Email.站内短信我收不到.
昵称:
Haozes
园龄:
5年4个月
粉丝:
17
关注:
3
最新随笔
WPF 多语言方案
.Net 2 Tip :捕获CSE和Thread.Timer与Thread.Sleep比较
使用Python操作MSSQL数据库.
使用CSharp Driver操作Mongodb介绍
运行.Net4.0程序是否要安装之前的.Net版本
javascript Disable <div> or other tag in Other Browser like FF,Chrome
Delphi 无类型参数传递动态数组和静态数组
WMI编程及python 操作WMI相关资料
扩展巴科斯范式介绍
HaozesFx 更新至飞信2010 协议
最新评论
Re:在ASP.NET中使用SOAP Extensions捕获WebService异常
很难找到的解决方案,顶起 -- luckuny
Re:Q99语言复读机(免费体验版)快捷键版
现在可以了,很聪明的想法。原来不能用是因为我在WINDOWS7下使用了中等字体,导致鼠标定位位置不正确,改成“较小100%”就可以控制了,不知道朋友还能否改进 -- 练练
Re:Q99语言复读机(免费体验版)快捷键版
快捷键怎么不能用,WINDOWS7 -- 练练
Re:EF Provider for Access/ODBC 以及ADO.Net Entity Framework 与Linq to SQL的比较和适用场景:
Linq to 啥都可以,只要愿意去实现. -- DYStudio.Net
Re:C#操作Excel(读取)
看VBA手册吧.
Workbooks 对象的 Open 方法。
-- Haozes
日历
<
2011年9月
>
日
一
二
三
四
五
六
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
随笔分类
Rss
.NET(17)
Rss
C/C++ Program(7)
Rss
Code Hurt(1)
Rss
Collect(5)
Rss
Database(0)
Rss
DataStructure(14)
Rss
Delphi(2)
Rss
Fetion(6)
Rss
InstallShield(6)
Rss
Making up the Mind(2)
Rss
MISC(4)
Rss
Python(8)
Rss
WebForm(7)
Rss
WinForm(7)
Rss
WTL(0)
随笔档案
2012年2月(1)
2011年9月(3)
2011年4月(1)
2010年12月(2)
2010年11月(2)
2010年9月(1)
2010年8月(1)
2010年6月(1)
2010年5月(1)
2010年4月(1)
2010年3月(1)
2010年1月(1)
更多...
2009年12月(3)
2009年11月(1)
2009年10月(1)
2009年9月(7)
2009年8月(4)
2009年7月(1)
2009年6月(3)
2009年5月(1)
2009年4月(3)
2009年3月(1)
2009年2月(2)
2009年1月(1)
2008年12月(3)
2008年11月(1)
2008年10月(1)
2008年9月(1)
2008年8月(1)
2008年7月(4)
2008年6月(1)
2008年5月(1)
2008年4月(3)
2008年2月(3)
2008年1月(1)
2007年10月(1)
2007年8月(2)
2007年4月(1)
2007年3月(6)
2007年1月(7)
2006年12月(10)
推荐排行榜
阅读排行榜
Friend's
Rss
零度の冰的博客
旅程
上午的绝缘杯
Links
Haozes Search
Rss
Mind Hacks
Scottgu
TerryLee's Tech Space
THIN‘S BLOG