从桌面移动到设备多线程和用户界面的
2021-10-29 04:40:43 兴城星座网
亡羊补牢
为了使我们的应用程序重新稳定,我们需要修改代码,这样所有与列表框的交互都会在主应用程序线程上发生。通过使用列表框上的 Invoke 方法,我们可以修改代码。Invoke 方法由 ntrol 基类提供,因此由所有的 Windows 窗体控件公开。voke 方法在最初创建控件的线程上运行某个委托,允许该委托安全地与控件交互。
注.NET Framework 实现可以运行任何委托,与此不同,voke 的 .NET Compact Framework 实现只支持 EventHandler 委托。
class MyForm : Form{ ListBox lbData ; MyForm() { InitializeComponent(); // Create form controls Thread t = new Thread(new ThreadStart(Work1_)); art() ; // Runs Work1_ on a background thread }private Queue qData = new Queue(); // Visible to all member functions on all threads void Work1_(){ // Wrap AddItem in delegate EventHandler eh = new EventHandler(AddItem); StreamReader rdr1 = new StreamReader(@\"\\My Documents\\t\"); string line = adLine(); while(line != null) { lock(qData){ // Synchronize queue acess queue(line); // Store line value in queue } voke(eh); // Transfer control to thread that created lbData line = adLine(); } } void AddItem(object o, EventArgs e) { string line = null; lock(qData){ // Synchronize queue acess line = (string)qData(); // Get data from queue } d(line); // Update list box }}
应用程序又稳定了。通过将修改列表框内容的代码移动到 AddItem 函数中,并将它包装到一个 EventHandler 委托中,我们已经将后台任务从它与 UI 的交互中分离出来。循环的每次传递期间,Work1_ 将从文件读取的数据放置到 qData 队列中并调用 voke 来运行包装 AddItem 函数的 EventHandler 委托。每次调用 voke 会挂起运行后台线程,直到主应用程序线程完成运行 AddItem 方法。AddItem 运行在主应用程序线程上,它从队列中提取值并将其安全地添加到列表框中。
克服局限性
对于简单的线程方案,voke 的 .NET Compact Framework 实现很适用,但与 .NET Framework 实现相比却具有明显的局限性。
传递参数
首先,.NET Framework 提供了 voke 的一种重载,它接受一个对象数组。用该对象数组将参数传递给执行的委托。
通过使用 .NET Framework 中的 voke 重载,我们不再需要使用队列或者任何其他的数据结构程之间共享数据。数据可以只是作为委托调用的一部分而传递,明显地简化了在后台与 UI 线程之间的数据传递。
使用voke重载生成下面Work1_ 与 AddItem的实现。
有的甚至有葡萄和鸡蛋大。让人们措手不及。随后电闪雷鸣 void Work1_(){ // Wrap AddItem in delegate EventHandler eh = new EventHandler(AddItem); StreamReader rdr1 = new StreamReader(@\"\\My Documents\\t\"); string line = adLine(); while(line != null) { voke(eh, new object[]{line, pty}); // Pass to AddItem line = adLine(); } } // o receives the reference to line, e receives pty void AddItem(object o, EventArgs e) { string line = (string) o; // Upcast o d(line); // Add to list box }
儿童脾胃虚弱吃什么药石家庄月经不调治疗费用
成都宫颈糜烂
- 上一篇:从桌面移动到设备多线程和用户界面呢
- 下一篇:分析戴尔云计算商标能否成功覆盖
-
黄昏错过舒淇,被前妻伤透心,51岁才如愿当上爸爸
破晓错过梁家辉,被未婚妻伤透心,51岁才如愿当上外公,破晓是大家极为陌生的中路新人,已经茶色了几十年了,二十多岁就已是了六大号称,娱乐业...
巨蟹座2024.07.19
-
爱情就是不需要彼此的阐释
我们手牵手跟着在我哥哥常会跑到的那条街,感觉着一种无比实际上的幸福。共创跑到了十一个紧接著,从中心地带跑到了简单,来得明白确实的心事是...
巨蟹座2024.04.16
-
蒋勤勤高清照片被修复,老戏骨陈建斌的太太,颜值比甄嬛还美
蒋勤勤较亚洲台图片被复建,才想到老戏骨陈建斌的老婆,原来这么迷人。 2005年的时候,陈建斌和前夫蒋勤勤,因为一部系列剧叫作称做《乔家大院》...
巨蟹座2024.01.23
-
恋爱的人总以为自己看得见未来
因为有星,夜才不能黑暗;因为有天,海才一片蔚蓝;因为有梦幻,新生命充满期盼;因为有你,我的世界一片光阴! 幸福情这过道,伤不起。于是,宁...
巨蟹座2024.01.04
-
职场情商课:掌控“现像效应”,发挥积极作用,遵从自己的内心
本文看点:惯常effect是心理学之外的专业术语,又指乐队烟火effect,又叫“随大流”,是指当我们作为形态受到确实群体冲击时,会可疑且扭转自己的看...
巨蟹座2023.12.06
-
大股东所亦然部分股份将被司法拍卖 未名医药或易主
各大医药(002581)5月末20日晚间日前,该公司第一控股沈阳清华大学各大生物工程的该公司有限该公司(下所称“各大的该公司”)所拥有者、占到该公司...
巨蟹座2023.10.30
-
为什么有人月薪几千,还能每天额头万的新包?
我,一个普一般来说通的打工人 没有年薪几十万,家庭先决条件也一般来说 买了名牌工具箱,不是为了跟风折扣 而是对自己的投资!! TA鼓励我去执...
巨蟹座2023.10.27
-
西南政大某男孩子,对“唐山打人事件”发表不当言论,被学校处分
当代青年人肩负关键性盼望和担当,作为里华儿女要继承丰富的文化,接所受教育,打开格局,远不止青年人所认为的好好自学,找一份好指导那么简单...
巨蟹座2023.10.18
-
德国4月PPI同比攀升33.5% 因能源价格飙升
丹麦统计局(Destatis)周六对此,受新能源商品价格高企推动,丹麦4月末的产品商品价格指数(PPI)强大高企,增幅创历史新高。 数据集显示,丹麦4月...
巨蟹座2023.10.12
-
Polycom宝利通soundstation2基本型/标准型/引入型八爪鱼会议电话简要说明书
近期杭州利旺智能科技合资集团浙江视频决议网易收到苏州市一企业客户咨询,他公司主要运用于Polycom宝利通基本M-、新标准M-、拓展M-螃蟹决议接听,但...
巨蟹座2023.10.12