摘要:
首先,必须要有一个主程序集(exe 或 dll 都可以),就是把附加的程序集都整合到这个程序集中。附加的程序集可以以嵌入的方式或者整合的方式。若选择整合的方式,建议勾选仅整合(不保护)。设置分为常规设置,保护设置,软件限制设置等。除了主程序集及其附加程序集(主要是dll文件)的设置以外,还有证书管理 阅读全文
摘要:
方案一:非托管动态链接库 将本机C++代码编译成一个dll文件以供C#调用,调用方法为 [DllImport("×××.dll")] 。此方法只能调用其中的函数,不能调用类。其原因是因为本机C++是非托管的,与C#的语言不兼容。 实现步骤如下: 方案二:托管C++类库 利用.Net框架下的公共语句运 阅读全文
摘要:
案例一: 有表message和user。 表messagemessageid senderid recipientid content1 1 2 "xxx"2 2 3 "yyy"3 1 3 "123" 表useruserid username1 "Tom"2 "Jim"3 "Rose" 希望查询的结 阅读全文
摘要:
1、如前所述,lock语句由编译器解析为Monitor类。Monitor类是一个静态类,有Enter和Exit方法。 运行结果: 将上述代码修改如下: 运行结果: 使用Monitor类再一次将上述代码做如下修改: 运行结果: 2、从运行结果可以看出,使用Monitor类可以完全取代lock语句。Mo 阅读全文
摘要:
1、如果两个或多个线程访问相同的对象,或者访问不同步的共享状态,会出现争用条件。 运行结果: 2、要避免该问题,可以使用lock语句锁定共享的对象。 运行结果: 3、也可以将共享对象设置为线程安全的对象。 4、过多的锁定会造成死锁。所谓死锁即是至少有两个线程被挂起,互相等待对方解锁,以至于线程无限等 阅读全文
摘要:
1、抽象线程类Parallel的For和ForEach方法可以多次调用同一个方法。Parallel类的Invoke方法允许同时调用不同的方法。 运行结果: 2、For方法的循环可以中断,中断的方式是使用ParallelLoopState的Break方法。 运行结果: 从上图所示的运行结果可以看出,程 阅读全文
摘要:
1、要使用Task类,必须要引用System.Threading.Tasks命名空间。 运行结果: 若没有第11行代码,则一定不会输出结果。但如果Sleep方法的参数很小(如设置为1),则出现上图中所示结果的概率也会很小。 2、创建任务的方式有3种,分别是使用TaskFactory对象的StartN 阅读全文
摘要:
1、Thread类可以创建和控制线程。Thread类的构造函数重载为接受ThreadStart和ParameterizedThreadStart委托类型参数。其中,ThreadStart委托要求函数为无参、返回值类型为void;ParameterizedThreadStart委托要求函数接受一个ob 阅读全文
摘要:
1、创建线程的一种简单方法是首先定义一个委托,如WaitAWhileDelegate。该委托的参数个数和参数类型要与其所将要委托的方法一致,如WaitAWhile方法。实际上委托是类的一种,因此在Program类的外部定义或者在其内部定义作为其内部类都是可以的。接下来使用委托的BeginInvoke 阅读全文