可以编写能同时执行多个任务的应用程序.此能力(称为“多线程处理”或“自由线程处理”)是设计处理器密集型且要求用户输入的组件的强大方法.计算工资表信息的组件就是一个可能利用多线程处理的组件示例.该组件可以在一个线程上处理用户输入到数据库的数据,而在另一个线程上执行频繁使用处理器的工资表计算.通过在不同的线程上运行这些进程,用户不必等到计算机完成计算,就可以输入其他数据.在本演练中,将创建一个简单的多线程组件,该组件可以同时执行若干个复杂计算.
应用程序将包括单个窗体与一个组件.用户将输入值并指示该组件开始计算.然后,窗体将接收来自该组件的值,将其显示在标签控件中.该组件将执行频繁使用处理器的计算,并在完成后通知窗体.您将在组件中创建公共变量,用以保存从用户界面收到的值.同时,您还将在组件中实现一些方法,根据这些变量的值执行计算. 【程序编程相关:模拟器和远程调试工具】
创建项目 【推荐阅读:最佳的75个安全工具】 注意 尽管对于计算值的方法来说,函数通常更为可取,但不能在线程之间传递参数,也不能返回值.有很多向线程提供值与从线程接收值的简单方法.在本演示中,将通过更新公共变量将值返回到用户界面,当线程执行完毕后,使用事件来通知主程序. 创建窗体 创建新的“windows 应用程序”项目. 将应用程序命名为 calculations,并将 form1.cs 重命名为 frmcalculations.cs.该窗体将用作应用程序的主用户界面.
双击设计器上的窗体以打开代码编辑器.在“编辑”菜单中,选择“查找与替换”,然后选择“替换”.使用“全部替换”将 form1 替换为 frmcalculations. 在“解决方案资源管理器”中,右击“frmcalculations.cs”并选择“视图设计器”.设计器打开. 向窗体中添加 5 个 label 控件.4 个 button 控件与 1 个 textbox 控件. 为这些控件设置属性,如下所示: 控件 名称 文本 label1 lblfactorial1 (空白) label2 lblfactorial2 (空白) label3 lbladdtwo (空白) label4 lblrunloops (空白) label5 lbltotalcalculations (空白) button1 btnfactorial1 factorial button2 btnfactorial2 factorial - 1 button3 btnaddtwo add two button4 btnrunloops run a loop textbox1 txtvalue (空白) 创建 calculator 组件 从“项目”菜单中选择“添加组件”. 将组件命名为 calculator. 向 calculator 组件添加公共变量 为 calculator 打开代码编辑器. 添加创建公共变量的语句,这些变量用于将值从 frmcalculations 传递给每个线程.变量 vartotalcalculations 将保留该组件执行的计算总数的累计值,而其他变量将接收来自窗体的值. public int varaddtwo;
public int varfact1;
public int varfact2;
public int varloopvalue;
public double vartotalcalculations = 0;
向 calculator 组件添加方法与事件
为事件声明委托,组件将使用这些事件向窗体传递值.
注意 尽管您将声明 4 个事件,但由于其中的两个事件将具有相同的签名,因此只需要创建 3 个委托.... 下一页