05 2012 档案
摘要:ASCII不能保存中文(貌似谁都知道=_-`)。
UTF8是变长编码。在对ASCII字符编码时,UTF更省空间,只占1个字节,与ASCII编码方式和长度相同;Unicode在对ASCII字符编码时,占用2个字节,且第2个字节补零。
UTF8在对中文编码时需要占用3个字节;Unicode对中文编码则只需要2个字节。
阅读全文
摘要:开发人员不喜欢打字。如果你希望提高开发人员的生产力,减少键入的数量,这也同时减少打字稿的数量以及因此产生的编译器错误,这些都极大分散了开发人员的注意力。代码重用是开发人员收集代码的另一个原因。即使单个应用程序也会大量地由小而公共的代码段组成,在几乎每个程序中都会有相同的代码元素:循环、类、异常处理等等。开发人员传统上是对代码进行剪切和粘贴以避免重复键入。但是这具有相当的局限性,包括有限的持久性,应该有更可行的解决方案。
这个解决方案就是在Visual Studio 2005中引入的代码段技术。代码段是可重用的源代码的容器。一个代码段是代码的一个别名。插入一个代码段就是在光标处或选中的地方将它所代表的代码插入到源文件中。代码段提高了开发人员的效率和准确性。
阅读全文
摘要:本文将讨论委托和事件一些更为细节的问题,包括一些大家常问到的问题,以及事件访问器、异常处理、超时处理和异步方法调用等内容。
阅读全文
摘要:基于事件的异步模式是比 IAsyncResult 模式更高级的一种异步编程模式,也被用在更多的场合。对于相对简单的应用程序可以直接用 .Net 2.0 新增的 BackgroundWorker 组件来很方便的实现,对于更复杂的异步应用程序则需要自己实现一个符合基于事件的异步模式的类。
阅读全文
摘要:使用 IAsyncResult 对象的异步设计模式学习
阅读全文
摘要:关于异步调用实现的一个列子
///
/// 输出当前线程的信息
///
/// 方法名称
static void PrintCurrentThreadInfo(string name)
{
Console.WriteLine("Thread Id of " + name + " is: " +
Thread.CurrentThread.ManagedThreadId + ", current thread is " +
(Thread.CurrentThread.IsThreadPoolThread ? "" : "not ") +
"thread pool thread.");
}
///
阅读全文
摘要:.NET Framework 允许您异步调用任何方法。为此,应定义与您要调用的方法具有相同签名的委托;公共语言运行库会自动使用适当的签名为该委托定义 BeginInvoke 和 EndInvoke 方法。
BeginInvoke 方法可启动异步调用。它与您需要异步执行的方法具有相同的参数,另外它还有两个可选参数。第一个参数是一个 AsyncCallback 委托,该委托引用在异步调用完成时要调用的方法。第二个参数是一个用户定义的对象,该对象可向回调方法传递信息。BeginInvoke 立即返回,不等待异步调用完成。BeginInvoke 会返回 IAsyncResult,这个结果可用于监视异步调用进度。
EndInvoke 方法检索异步调用的结果。调用 BeginInvoke 后可随时调用 EndInvoke 方法;如果异步调用尚未完成,EndInvoke 将一直阻止调用线程,直到异步调用完成后才允许调用线程执行。EndInvoke 的参数包括您需要异步执行的方法的 out 和 ref 参数
阅读全文
摘要:默认情况下,C#中的伪随机数生成器Random是根据系统时间来设置其种子的。若我们采用默认的方式,对Random进行初始化的时候不赋予任何参数,其随机种子便采用系统时间。如果我们用循环一次生成多个随机数,由于CPU运算速度太快了,所以每次取到的都是同一个时间,即生成的随机数都会一样,因此每次生成随机数之前需要更换随机数种子。
阅读全文
摘要:1、代码的折叠和展开:
在VS2010使用过程中,用#region/#endregion块来分区代码是一个经常被使用到的功能,可以使代码结构看起来更加清晰。
使用过程中有一些快捷键:
光标位于#region/#endregion包含的区域时,直接按Ctrl+m,m 可以使该语句块折叠/展开。
在代码中使用Ctrl+m,o 可以使整个文件的代码全部折叠起来。Ctrl+m,l (是L的小写)可以使整个文件的代码全部展开。
阅读全文
摘要:在C#中,直接在子线程中对窗体上的控件操作是会出现异常,这是由于子线程和运行窗体的线程是不同的空间,因此想要在子线程来操作窗体上的控件,是不可能简单的通过控件对象名来操作,但不是说不能进行操作,微软提供了Invoke的方法,其作用就是让子线程告诉窗体线程来完成相应的控件操作。
要实现该功能,有两种方法可以选择:
阅读全文
摘要:1、引入相关的命名空间。具体代码如下:using System.Diagnostics; //Stopwatch类 2、在需要计时的地方定义相关的计时器并开始计时。具体代码如下:Stopwatch sw = new Stopwatch(); //初始化一个计时器 sw.Start(); //开始计时 scExamDetails.Controls.Clear(); //执行任务 sw.Stop(); //...
阅读全文
摘要:假设热水器由三部分组成:热水器、警报器、显示器,它们来自于不同厂商并进行了组装。那么,应该是热水器仅仅负责烧水,它不能发出警报也不能显示水温;在水烧开时由警报器发出警报、显示器显示提示和水温。
阅读全文