随笔分类 - C#
摘要:泛型在.NET 2.0中正式的引入。在使用泛型的过程中,联系上面向对象的继承性。往往很容易想当然敲出类似以下代码List animalLst=new List;显然这样编译是不通过的。虽然Dog和Animal之间有继承性,但是List和List这两个类之间并没有继承性。如果要解决这样的问题,用上协变与抗变(逆变),它们统称为变体。是.NET 4.0引入的新特性,但是早在.NET 2.0就引入了。 变体适用于泛型接口与泛型委托,在我们声明泛型借口或泛型委托时,加上out或in关键字就能实现。out是用于协变,这就好比子类通过隐式转换成基类的情形,这么平淡的转换,与“协”的感觉类似;in是用...
阅读全文
摘要:一、线程池的适用范围 在日常使用多线程开发的时候,一般都构造一个Thread示例,然后调用Start使之执行。如果一个线程它大部分时间花费在等待某个事件响应的发生然后才予以响应;或者如果在一定期间内重复性地大量创建线程。这些时候个人感觉利用线程池(ThreadPool)会比单纯创建线程(Thread)要好。这是由于线程池能在需要的时候把空闲的线程提取出来使用,在线程使用完毕的时候对线程回收达到对象复用的效果。这个就涉及到池的性质了。线程(Thread)很容易跟数据库连接、流、Socket套接字这部分非托管资源归在一起,但是个人认为Thread并不是非托管资源,有个低级点的判别办法,就是Th..
阅读全文
摘要:在当初试用多线程的时候发现多线程能减轻或消除大量繁杂操作或过长等待时间造成的停滞感(就是线程阻塞)。后来发现使用异步操作也能达到相同的效果。但是两者之间是有区别的,之前在知识库里看了一些文章,我也记录了一下(有人云亦云的感觉),顺便也摆出一些个人观点。 多线程和异步虽然都可以减轻或消除线程阻塞而造成的停滞感,但是两者的本质上是有区别的 多线程是软件级别上的机制,在微观上它是分配CPU的时间片给某个进程中的各条线程,获得时间片的线程就可以处理它的任务,也就是执行代码。在其中负责调度CPU资源的就是操作系统,所以多线程是否能实现取决于操作系统,现今绝大部分操作系统都是多线程的系统,在DOS...
阅读全文
摘要:初次接触启动界面记不清是在哪一年了,估计是小学四年级第一次打开Office Word的时候吧,更记不清楚当时的启动界面是长啥样了。后来随着使用的软件越来越多,也见到各式各样的启动界面。下面就列举了两个平常本人平常最常见的窗体,其实windows系统在启动的过程中,有Window字样并且有动画效果的那个节面也算是一个启动界面。 其目的很明显,就是程序启动之后,由于加载主界面的时间过长而导致用户体验不佳,于是往往在显示主界面之前多显示一个不带windows窗体元素的窗体,来显示应用程序加载的进度或者直接是一个静态的视图,作用在于就是跟用户反映程序是有响应的并且正在运行当中,从而提高用户体验。...
阅读全文
摘要:以前大学做项目(Web的毕业论系统)就看见过在网页中嵌入Office的word,那时候用了哪个控件当时没记下来,我倒是忘了,最近发现在WinForm要嵌入Office的话,可以使用DSOFramerControl。环境 使用之前要注册一下COM组件才行,使用 regsvr32注册 dsoframer.ocx。要是用这个的话,系统里面肯定要有装Office,要是很好使用的话,还得有Office开发组件,获得这组件的途径可以是在安装Office时把PIA也安装上。在这里可以找到添加上工具箱当然这篇文章中只涉及到Word的使用,这个控件其实能给Office的其余成员——Excel,Visio和...
阅读全文
摘要:要用到系统里面的特殊路径,显然直接写“C:\Document and Setting\”不现实,那还是用回.NET 类库里面提供的比较好。要获取到桌面文件夹的路径,上网找的有种办法是Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)这个是感觉是最保险的,毕竟是.NET提供的。可是获取到的东西并不是我想要的,上面获取到的是当前用户的桌面路径,但是并非公共用户的桌面路径。在网上看到一种用注册表获取的方式,没尝试过,但眼看也只是获取到当前用户而已,而且注册表有个不太好的地方就是在Win8下安全措施下,单纯运行..
阅读全文
摘要:在Web上面要实现一个遮罩层或者说是蒙版吧,有了DIV那不算什么难事,只要给div定好位置和大小,把颜色的Alpha值设一下就有透明的效果。不过在Winform中实现起来就没那么简单了事。尝试过用一个Panel,那底色设成透明,真的透明了。窗体后面的东西都显示出来了。就是没把Panel盖住的控件显示出来。这样看来不是办法。谷了一会儿歌。找到了一个,还是要写控件的,不算难,但用到了一点儿没见过的东西。经一事长一智吧。 重写到了一个Control的属性CreateParams,它是CreateParams类型的。关于这个类,MSDN上简单解释道:封装创建控件时所需的信息。而依我看是关于样式的...
阅读全文
摘要:之前想过要做个地铁驾驶的游戏,其中想把一些原本是矩形图片弄成一个梯形,但是发现GID+上面没有类似的方法。于是在谷歌谷了一下。没有!只能找到令人垂涎的,并没有源码。按照自己的想法尝试了一两天,有点效果,但实际上不是那样。后来知道那个在数字图像处理中叫“透视变换”。于是上网找了相关资料,原理找了,看了不明白。代码没多少,有ActionScript的,不明;有C的,不明。真笨啊!后来在CodeProject上面看到一份外国人的博文,全英文看不太明白,但看了一幅图,大概知道他意思了。下了份源码看看,C++的。好不容易翻译成C#的(感觉还是保留了不少C++风格的东西),编译通过,运行正常。后来才一..
阅读全文
摘要:之前看到老大的一个QQ签名,说想写一个WP的程序,可是后来,后来就没有后来了。我去年打算学一下WP程序开发的,一年了也无任何进展,我可不想后来,后来就没有后来。于是抽时间来接触一下。虽然都是用CShsarp,虽然都是拖控件,但是xaml不熟悉,界面的布局也不熟悉,就连手机的环境也不熟悉。以前写winform程序时知道鼠标单击事件是Click,键盘按键就keypress等。可是WP的控件没有Click。于是这回就熟悉一下WP的重力感应,触控和加速这三方面。方向处理 在使用WP的时候就会发现,一个长方形的屏幕,有时候它的内容是竖屏显示的,像开始菜单,QQ;有些内容是横屏显示的,像视频的播放;...
阅读全文
摘要:这个控件太傻瓜了,只搁在博客里算了。日前需要用到一个载入条,但不想找GIF图片,.NET里面没有提供这个控件,只有ProgressBar。自己写吧!要写也不难,就是周期性绘制一个长方形,让那个长方形不停地向右移动。这个周期性的操作可以开一条线程Thread。我就用了一个WinForm的控件Timer 用到了GDI+,重写OnPaint方法是免不了的。 1 protected override void OnPaint(PaintEventArgs e) 2 { 3 base.OnPaint(e); 4 Rec...
阅读全文
摘要:有天在想工作上的事的时候,看着.net原有的DataGridView,想起以前我写过的一篇文章,总结了一个好的Gird控件应该具备哪些功能,在那里我提及到了分组功能,就像jqGrid那样, 其实这样的显示型式很常见,就在平时邮箱的邮件列表就是按这种分组型式显示的,按今天、昨天、上周之类,在购物网站的历史订单处也可以看见这种Grid表的身影。但是原有的DataGridView并不支持这种分组功能。那只能扩展一下了。 之前写了一个多维表头的GirdView,有经验了,知道搞这种图形化的东西无非都是用GDI+,上网找了一些文章后有点愣住了,之前画表头的是在DataGridView的OnPai...
阅读全文
摘要:APS.NET MVC中(以下简称“MVC”)的每一个请求,都会分配给相应的控制器和对应的行为方法去处理,而在这些处理的前前后后如果想再加一些额外的逻辑处理。这时候就用到了过滤器。 MVC支持的过滤器类型有四种,分别是:Authorization(授权),Action(行为),Result(结果)和Exception(异常)。如下表,过滤器类型接口描述AuthorizationIAuthorizationFilter此类型(或过滤器)用于限制进入控制器或控制器的某个行为方法ExceptionIExceptionFilter用于指定一个行为,这个被指定的行为处理某个行为方法或某个控制器里面...
阅读全文
摘要:之前在探讨ASP.NET MVC的路由时,无意发现原本ASP.NET也有路由机制的。在学习MVC的路由时觉得这部分的资料不太多,不怎么充实(也许是我不懂得去看微软的官方文档)。后来也尝试一下ASP.NET的路由,本文也算是阅读了蒋金楠和重典两位老师后写的读书笔记吧! 路由机制最显著的一个效果就是实现URL和物理文件的分离。这个分离了之后有三个好处:更灵活,更好的可读性,SEO更友好。 具体是这样的:灵活在于文件的路径有了更改(例如放到了一个新的文件夹里面),那就得把所有涉及到那个文件的URL都改一遍,懒一点的就Ctrl+H。如果用了路由映射的话,只需要在一个地方改就可以了,简洁省事;更好...
阅读全文
摘要:一时兴起,想写个模拟地铁驾驶的游戏,但是很多东西都不会,资源哪里有?例如列车前进时周围景物的动态效果怎么做出来,速度控制杆上各个幅度代表了多大的加速度。我很佩服也很羡慕《申城脉动》的作者,能写出那样的一个游戏和获得那么多的资源。地铁族上面资料不少的,但不会找出来,废话不多说。 里面要用到的速度仪表盘,上网看见别人画了不少很炫的,但提供下载没有。对GDI+不太了解的我只能自己写。幸亏看到一篇博文,是别人学生时代的实验报告的(呵呵!这就是差别)。里面的代码我没看,我只看了一幅图片就够了。之前只困惑于仪表盘上面的刻度是怎么画出来的,那篇文章里面有一幅图就是一幅三角函数的图。之前一直没想到这里要...
阅读全文
摘要:Trackbar见了很多种,每种播放器的都有它自己风格的Trackbar,鄙人最近在写一个属于自己的播放器,但是不想使用VS工具箱里面的那个Trackbar,于是上网看了一下资料,自己也模仿地写了一个。 其实写这个控件,关键就是用GDI+来绘图,对于这个Trackbar控件必要的属性和行为(包括方法、事件),一个简单的Trackbar就能做出来了。感觉这个就是一个GDI+章节的练习吧。 我写的这个Trackbar是继承Control类的,不是TrackBar,也不是UserControl类,又不是ScrollableControl类。Trackbar有以下外放的属性MinValue:T...
阅读全文
摘要:最近在写音频播放器,不过有点懒散,开发进度很慢,一天只做了一点点东西。其实就是让程序能播放音频。这个在我大二学winform程序开发时书上有说,那是书上教的是用media player的COM组件,而且当时什么也不会,写出来的东西只能播放单个音频。要播放完整个播放表的所有歌曲,必须得在播放完一个音频时点击播放下一个音频,也就是不懂得自动切换音频。当时也有想过,如果能获取到一个音频的长度就好了,但是那时候不懂得百度,即使百度了也不懂得那些Thread啊什么的。 现在对Thread有了一些认识,也用过系统的API,感觉写个播放器完完全全没问题,而且对一个单纯用于听歌的播放器有点自己的想法。于...
阅读全文
摘要:上次做的那个导入器不够强大,限制还不小,用起来不方便。于是就再做一个这样的工具。代码基本上不同了,思想还是差不多,但功能肯定比之前的强大。经过了这次编写工具,对vdporj文件的了解又深一层了。在vs的文件系统编辑器使用过程中,发现有两个不方便:第一是删除文件夹不方便,如果一个文件夹不是空的话,是删不成功的;第二是添加文件夹时,只能添加该文件夹的文件,如果指定的文件夹含有子文件夹,那些子文件夹就要手动一个个去添加,不会一同添加进去。 针对第二个问题,我就写出了之前的那个导入器,针对第一个问题,我就写了这个浏览器。这回就先看一下界面功能大致有一下几个 同步文件夹:把“应用程序文件夹”里的某...
阅读全文
摘要:在网上传闻SQLDMO是个好东西,当时没有注意这个传闻是什么时候了,后来才在微软的官网上看见,从SQL Server2008开始就不用SQLDMO了,取而代之的是SMO。无奈了,还写了个Helper。感觉DMO用起来比用SQLCMD少输些命令,而且如果用ADO.NET调用存储过程的话,好像还比DMO方便。这个SQLDMO绝不是像别的dll那样直接添加引用的,它是个COM组件,要注册了才能使用,这说明了,凡是要跑带这个组件的程序,都要先注册一下组件。在网上下一个SQLDOM的压缩包,解压后第一步:首先将msvcr71.dll, SQLDMO.DLL, Resources\2052\sqldmo.
阅读全文
摘要:不光是敲代码,最近连打包也做了,各种各样的打包要解释:给仪器打包,吃饭时帮同事打包饭菜,给生成好的程序打包。由于这里是博客园,仪器打包和饭菜打包不能说太多,不然有移出首页的危险。之前写了两篇关于安装包制作的博文了,这回继续写与安装包相关的。尽管现在有不少的打包工具,但是还用着VS来打包。 来说说背景,有这么个程序,他的完整代码我手上没有,每次打包都要搭档生成一份给我,这样就没法在项目输出那里把需要的文件(包括exe)塞进去,只能手动去添加,但是面对着多个文件夹,我只能用老黄牛的办法把它们都加进去。一般情况下,我只会把最新的文件替换过去就算了,不过如果添加了新文件,少添加了打包后的程序会不完..
阅读全文
摘要:此操作类主要使用了系统命令行来实现的,详细的命令可参照微软文档《如何使用"netsh advfirewall firewall"上下文而非“netsh firewall”上下文来控制 Windows Server 2008 和 Windows Vista 中的 Windows 防火墙行为》,而检查端口部分则利用Socket判断端口是否被占用,但是在也会有判断失灵的时候。 1 public static class PortHelper 2 { 3 #region 命令原型 4 //netsh firewall delete allow...
阅读全文