bindsang

工作五年,长期从事于asp.net方面的编程,业余爱好VC编程,温和、谦虚、自律、自信、善于与人交往沟通
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2012年6月26日

摘要: c#中所有可以被抛出的异常都是直接或间接继承自System.Exception类 支持的捕获异常的语句块如下: try … catch try … catch … finally try… finally c#代码块中生成异常堆栈信息的时机不是在throw语句执行的地方,而是在第一次捕获的地方 以上三种方式中 try ... finally一定不会影响堆栈信息 可能会影响的地方主要集中在catch块中 catch子句声明方式又有以下几种 catch{} catch(Exception){} catch(Exception ex){} 这三种写法从捕获异常的能力上来说基本上是等效 第三种方式只是让编写代码的人可以使用异常参数,如果不使用异常参数的话可以用前面两种,第二种只是更加明确的指出了捕获的是Exception或者是从Exception继承的异常... 阅读全文

posted @ 2012-06-26 16:22 兵 阅读(2675) 评论(2) 推荐(1) 编辑

2009年6月18日

摘要: 最近做了一个Web项目,服务端采用ASP.NET。浏览器中需要用到证书登录,为了使以后能够读取USBKey证书和密钥,所以使用了ActiveX技述。这中间遇到了好多的问题,不过最后都一个一个解决了。 首先是从客户机里导出证书和密钥的问题,基本的CryptoAPI提供了两个函数可以导出,一个是CryptSaveStore,另外一个是PFXExportCertStore函数。网上关于这两个函数导出证书的代码都有很多了,我也不想再在这里写。不过这两个函数都有一些问题,用起来我都不太满意。第一个函数也就是CryptSaveStore导出的证书怎么也不能用Windows向导导入到证书管理器中,这个问题折腾了我好久,最终没能解决只得放弃;第二个函数也就是PFXExportCertStore,这个函数虽说能导出证书可是只能导出PFX格式的,也就是可能包括了私钥(如果原本有的话)在内的证书,而且还得给个导出密码,重新导入的时候还得再次输入相同的密码。我想要做的是只导出证书文件本身,不导出私钥,对它用私钥签名,任何拿到证书的人都可以用证书上带的公钥进行验证证书的合法性,而且 阅读全文

posted @ 2009-06-18 23:42 兵 阅读(1190) 评论(0) 推荐(0) 编辑

2009年1月8日

摘要: 最近在做一个网站的HTML文章发布功能,用到了HTML编辑器,这个是以Iframe为基础的编辑器(貌似网上大多的都是用iframe的)。却发现一个问题,IE下运行得好好的,在Firefox里却始终不能提交更新后的数据到服务器上,找了半天原因才发现原来是在iframe的onblur事件里面调了更新数据内容的方法,但firefox下却没有执行。   于是立马开始google了一把,发现遇到问题的不是我一个人,大量的人都是在问怎么解决firefox中触发blur和focus事件的问题。答案到是给了一大堆,却没一个靠谱的。有一种答案说是放到setInterval里去执行。。。。。。 阅读全文

posted @ 2009-01-08 15:41 兵 阅读(4144) 评论(5) 推荐(2) 编辑

2008年12月24日

摘要: 每个程序员学编程的时候都是从单线程的程序入手的,等到了具有比较多的编程实践经验后才开始接触到多线程编程,多线程的技术在程序使用上带来新的友好体验的同是也带来了一系列的问题,其中最大的一个问题就是“同步/死锁”。 在C#中提供了多种实现同步的类和方法,下面就分别对每种方式作一个说明。 阅读全文

posted @ 2008-12-24 11:44 兵 阅读(4272) 评论(7) 推荐(1) 编辑

2008年12月23日

摘要: 通常我们在做多线程编写WinForm程序的时候经常听到的一句话就是“窗体控件只能在主线程中创建”,刚开始的时候我也接受的是这样的教育,因此一直以来一直在编程中有意识的这样做了。平时也没有过多的去想为什么要这样做,就把这个当做是一条公理了,就像是数学中“两个不同的点确定一条直线,三个不在同一直线上的点确定一个平面”一样那么简单。 最近又一次在做一个WinForm程序,突发奇想想要试试在非主线程创建一个窗体控件会有什么结果为什么不能这样做。 结果运行这段程序的时候@1这个地方的两行代码也执行到了,可是却一点问题都没有,没有异常,没有特殊的提示,程序也能正常退出。这是怎么回事呢?不是说不能在非主线程上创建控件吗?可是我这个程序不是好好的运行着又怎么解释呢。带着这样的问题我又回头去看了一个自己写的代码,这次发现了一个问题:frm 调用的是ShowDialog方法,这会使调用线程一直阻塞在这个地方。会不会是这个原因呢?于是我把ShowDialog替换成了Show方法,一试,果然就出错了。我又试了其它几种常见的控件,TextBox,Label,Button都是这样,唯一 阅读全文

posted @ 2008-12-23 15:27 兵 阅读(1683) 评论(7) 推荐(2) 编辑

2008年12月22日

摘要: C#里面没有现成的DirectShow的COM组件的定义,虽说在C#中可以使用一些特定的方式来操作COM组件(C#中COM操作(一)---实例化),可是对于DirectShow这样需要声明一大批的COM接口,类型,枚举却是一件漫长又枯燥的事件,而且搞不好一个不小心中间出个错误,导致最后调试总不通过而抓狂。即便是现在有了DirectShow.NET提供的对绝大部分的DirectShow的C#翻译,可是面对网上那么多的C++开源代码还有少得可怜的C#操作DirectShow的代码,你会怎么办?难道又是一行一行的翻译成C#吗,反正我是不会这样干的,于是这种方式首先被毙掉了。 俗话说最优秀的程序员也是最懒的程序员,类和方法能公用的就尽量公用,已存在的实现就不需要自己再去写一次了。既然有现成的C++的实现好的代码为什么不可以再次拿来用一用呢。可是在C#里面想要使用C++的实现(注意这里我用的是实现,并没有指定是类或方法),比较常见的是通过 DllImportAttribute特性导入相应的程序集,可是这种方式只可以调用方法,而且是限定死了的只能是C语言形式的导出方法。 阅读全文

posted @ 2008-12-22 14:23 兵 阅读(1978) 评论(1) 推荐(2) 编辑

2008年8月21日

摘要: 以前对于PHP中的引用一直觉得很神秘,与C#里面的不一样,但平时使用的时候这方面用的比较少,或者说很难接触到,所以对PHP里面的引用的理解一直是浅尝辙止,没怎么深入的去研究,正因为如此也一直存在着一种敬而远之的感觉.今天在写一段PHP脚本的时候发现了一个关于使用引用的问题,花了我半天时间才解决了,但是这个问题却让我不开始正视PHP里面的引用,及怎么理解和使用引用. 阅读全文

posted @ 2008-08-21 11:58 兵 阅读(732) 评论(1) 推荐(0) 编辑

2008年8月18日

摘要: 去年有段时间公司做了个PHP的项目,做了半年的PHP.当时用到的是PHP5.1.6版的,那个时候就发现了Windows版PHP中的PDO不支持一次返回多个查询结果,也就是PDOStatement的nextRowset不能正确执行,给的提示说是什么这是个可有可无的特性,这里没有实现(我faint).但是在Linux上的同样版本号的方法却能正常执行,一般来说我们大都是在Windows下开发,布署的时候在LINUX上,这对于实际运行到没有太大的影响,(虽说PHP的屁股是坐在LINUX这边的,可是为了顶LINUX也不至于用这种手段吧). 阅读全文

posted @ 2008-08-18 11:11 兵 阅读(1711) 评论(0) 推荐(0) 编辑

2008年8月8日

摘要: 前几天我的一个同事在和我交流的时候,提到了这样一个问题:为什么在DateTime里面的一堆AddXXX的成员方法不是作用在实例本身,而是另外返回一个重新实例化的DateTime,在通常的理解上我们看到一个对象的AddXXX的实例方法的时候,第一感觉应该是作用在本身上,即是把本身某个字段的值改变成运算后的值。可是在这里却不遵循这样的“常理”。这样在用的时候,想把一个DateTime的值加上一定的时间的话,很容易就忘了需要重新执行赋值操,导致程序执行的结果和我们预期的不一样。 阅读全文

posted @ 2008-08-08 17:40 兵 阅读(417) 评论(0) 推荐(0) 编辑

2008年8月4日

摘要: 最近做网页的时候要求一个输入框只能输入数字,发现在ff的input上挂的dragenter和dragover事件不工作,一开始以为是自己的代码写的不对,DEBUG了半天,发现这段代码在IE下是好好的,可是在FF下就是不工作 阅读全文

posted @ 2008-08-04 17:35 兵 阅读(432) 评论(0) 推荐(0) 编辑

2008年8月1日

摘要: 上一篇我们讲到了C#中创建COM对象的几种方式。不知大家也注意到了,最后一种方式中JetEngineClass类并没有提供方法供我们调用,要使用它的话必须先把这个引用转成接口引用才能直接使用里面的方法,实现早期函数绑定。虽然我们在声明JetEngineClass类的时候并没指定该类实现了IJetEngine接口,但是后面在使用的时候却直接把engine用as操作转成了IJetEngine接口,而且居然转成功了。而且大家也可以用is操作符测试一下,engine is IJetEngine反回的结果也为true。这就是本篇要讲的---C#中COM对象接口的查询。 阅读全文

posted @ 2008-08-01 12:22 兵 阅读(3333) 评论(0) 推荐(0) 编辑

2008年7月31日

摘要: 用C#做WinForm程序,时间长了难免会遇到和COM组件打交道的地方,用什么方式创建COM对象也成了我们必须面对的一个问题.据我所知道的创建COM对象的方法一共有以下几种:.... 阅读全文

posted @ 2008-07-31 11:10 兵 阅读(2518) 评论(3) 推荐(1) 编辑

2008年7月30日

摘要: 现在大家做网页的对话框的时候,大多倾向于AJAX技术,就是对话框与网页在同一个页面,用AJAX技术控制对话框的内容和对话框的显示,隐藏,在用这种方式时虽然大家都能很容易的把"对话框"浮在最上层,也可以让他自由拖动.但是,却不能达到传统的模态对话框的效果,那就是界面上的其它按钮呀,链接呀什么的,只要是没有被挡住就还是可以点击."达不到看得见,点不着的效果". 一个可行的方法就是找一个遮罩层在对话框显示的时候盖在网页上,达到阻止点击的目的,常见的用于做遮罩的HTML元素有IMG,DIV等,用IMG加载一个透明的图片(一般来说是gif)或者作为DIV的背景图片,这样的确是实现了"看得见,点不着的效果",可是俗话说得好"林子大了,什么鸟都有",偏偏就有个叫IE6的,而且是占绝对数量用户群的一个浏览器,在里面下拉框(select)居然不受z-index控制,不管什么情况下始终"倔强"地出现在最顶层,挡也挡不住,被号称IE6最精典的BUG之一.曾经想尽一切办法想要解决这个问题,还是不能够搞定,咱没必要为了一个M$自己的BUG去浪费自己的时间和精力.我想很多程序员应该都有这种想法吧. 阅读全文

posted @ 2008-07-30 13:54 兵 阅读(1060) 评论(0) 推荐(0) 编辑

2008年7月28日

摘要: 使用C#也好几年了,从一开始的囫囵接收,到后来积累到一定程度后再回过头去细细思考,这期间也发现了一些恍然大悟,矛塞顿开的情况.我.NET的事件触发的原理的认识就是这样走过来的. 在刚使用C#的时候(vs2003),没有多少参考资料,没有Reflector,只有一个随着IDE一起的MSDN,所有的东东基本上都需要从那上去去找,那个时候对.NET里面的事件一直有几个不明白的地方: 1. 事件本质上是一个委托,为什么在声明的时候没有给事件初始化,但是挂接事件的时候却可以直接用+=给事件增加一个处理函数,这个时候却不会报NullReference异常,而单独声明一个委托引用直接这样使却会报错? 2. 为什么基类声明的事件在派生类里没法直接调用触发事件? 3. 为什么在Framework中,对于一个没有密封(sealed)的类,每个声明的事件基本上都有一个On+事件名称的protected的函数(有时候还是虚函数)? 阅读全文

posted @ 2008-07-28 16:13 兵 阅读(411) 评论(0) 推荐(0) 编辑

摘要: CSS开发辅助工具:Internet Explorer Developer Toolbar 是一款基于IE的开发辅助工具。(简称为IE Developer Toolbar)   以前有个CSS开发辅助工具Web Developer插件是基于FF环境的,但是在许多开工调试中,主要还是面对IE,这款工具对于CSS辅助开发非常有益,大家可以试试它的功能。 阅读全文

posted @ 2008-07-28 11:43 兵 阅读(793) 评论(0) 推荐(0) 编辑