硬盘故障一例

晚上八点多睡梦被电话吵醒,原来haman的硬盘出了问题,80G的硬盘经过装系统后无法启动且显示为30多G,过去后拿着的SuperBootCD盘出问题了,没有办法,使用VFloppy和Diskgen重建分区表无效。然后使用FinalData居然也只识别32G,上smth后看到有人也提到同样的问题,并说是跳线造成的,于是明白了,haman想把跳线设成主硬盘,结果放反了,变成设置为32G,然后格式化,于是分区表损坏了。又在smth上发现有人推荐软件partitiontabledoctor的软件,下载后果然有效,发现后面放数据的几个盘,问题成功解决。

C# UI处理耗时操作

昨天过去系统部,解决一个性能的问题。在项目中遇到一个问题,在UI程序中增加timer, 间隔为2秒,结果在其中进行了比较耗时的操作,于是UI变得慢得难以忍受。
遇到这个问题,显然是不应该在依靠Window消息机制实现的定时器中处理费时的操作,首先分析了一下该操作的耗时,平均值1.6s,最大值大概在2.4s,于是准备采用异步调用机制来解决这个问题,显然可以采用BeginInvoke或者自己创建新的Thread来处理,但在查MSDN发现BackgroundWorker更为适合来处理这种情况。
BackgroundWorker可以启动后台线程来处理费时的操作并在操作完成后调用主线程的方法,显然这个也可以通过委托的异步调用机制来实现,不过使用BackgroundWorker会简化许多工作,使用起来非常方便, 它包括三个事件:DoWork,  ProcessChanged和RunWorkerCompleted, 调用BackgroundWorker.RunWorkerAsync会触发DoWork事件,异步调用完成后会触发RunWorkerCompleted事件,BackgroundWorker.ReportProgress会触发ProcessChanged事件,这样就可以非常简单解决面对的问题。
在Form中通过工具箱增加一个BackgrondWorker,然后增加DoWork的处理函数,在其中调用费时的操作,然后在timer的处理函数中使用BackgroundWorker的RunWorkerAsync方法,不过要注意的是一个worker不能同时调用两个RunWorkerAsync方法,所以在timer中需要增加IsBusy的判断,于是问题解决。

月记

呵呵,一个月都没有更新了,感觉很忙碌和有些压抑的一个月,但扪心自问,似乎自己并没有真得让自己忙到什么程度,不过总的来说在这个月里面,定下了自己的工作,完成自己的毕业答辩,算是两件最大的事情完成了,总的来说还都是比较满意的,很多时候要有一种知足常乐的心态。除了这两件自己的大事情外,前天也完成了项目组的一个863的结题,不管怎么说,总算有始有终,算又是给自己心里歇下了一块石头。
昨天下午又去了系统部,那边似乎对我们很有些意见,现在想想,其实事情都是两个方面的。主要是那边遇到了系统的一个性能的瓶颈问题,过去后解决了这个问题,接着是非正常退出的处理不正常了,很简单解决了,然后是一些细节的问题,主要是zz具体实现的。从今天的沟通看来,估计还有两三周才能把事情都给解决掉。晚上宇老师请我们吃了顿饭,然后坐车回到学校,准备处理自己剩下的一些杂务。现在也就希望系统部的项目尽快结体,那么从我的角度来说也能够给读研这两三年画上一个完整的句号了,希望一切顺利吧。
很多时候真的不用在意别人的评价的,尽力把自己要面对的事情做好就够了,至于别人的评价,那真的是没有多大的意义的。是要考虑一下自己下一步的安排了,呵呵。