从桌面移动到设备多线程和用户界面呢
2021-10-29 04:40:41 兴城星座网
适用于:Microsoft .NET Compact Framework
简介
很多人开发移动应用程序已经好多年了,但更多的人对移动性还很陌生。大多数是传统企业的开发人员,他们对用 Microsoft .NET Framework 构建桌面应用程序很有经验,并且现在开始使用 Microsoft .NET Compact Framework 构建设备应用程序。
黑龙江参会代表也表示 您们中间那些使用 .NET Compact Framework 和 .NET Framework 的人都非常清楚:由于处理能力或者大小方面的原因,尽管这两者之间有很多共同点,但还是忽略了一些特性。尽管这些方面大多数都不会有问题,但一些重要方面足以产生挑战。
我在和企业开发人员的谈话中发现,当使用 .NET Framework 的开发人员转向使用 .NET Compact Framework 时,他们好像一般会在两个方面遇到问题。第一个问题是从后台线程与用户界面 (UI) 交互。另一个问题就是管理复杂的部署,尤其是那些涉及全局程序集缓存和转发版本的部署。
两个问题都非常重要并且都有点棘手,因此我分两次进行讨论。本文将焦点集中在:当从后台线程与 UI 交互时,克服 .NET Compact Framework 的局限性。下文将专门讨论部署,即全局程序集缓存以及转发版本。
多线程和用户界面基础知识
构建一个不稳定的应用程序
您们中的许多人可能已经熟悉从后台线程与 UI 交互的相关问题,但作为一种复习,让我们快速回顾一下。考虑下面的代码示例。
class MyForm : Form{ ListBox lbData ; MyForm() { InitializeComponent(); // Create form controls Work1_(); // Call Work1_ on the current thread } void Work1_(){ StreamReader rdr1 = new StreamReader(@\"\\My Documents\\t\"); string line = adLine(); while(line != null) { d(line); // Populates the list box as expected line = adLine(); } } }
这是一个非常简单的示例,但是它表示了智能设备开发人员所面临的共同问题:需要用数据填充应用程序 UI,检索这些数据可能会非常耗时。在该示例中,应用程序创建了一个包含有列表框的窗体,然后调用函数 Work1_ 来用某个文件的内容填充列表框。
如果该文件很小,那么毫无意外,该应用程序会运行的非常好。但是,如果读取数据的过程所花时间过长,那么呈现给用户的应用程序可能会无响应甚至会冻结。如果将应用程序修改为从低带宽的无线连接中读取数据,应用程序的无响应性则更需要关注。
我们必须确保开发人员执行一项冗长的任务时 UI 要保持响应性的一种方法是,将该任务转移给一条后台线程。这不会使实际任务的运行速度更快,但是通过长时间运行的任务在后台运行期间允许应用程序的其他部分继续进行,它确实提供了一种响应性更好的用户体验。
通过使用 Thread 类和 ThreadStart 委托在后台线程中执行 Work1_,我们可以轻松地将应用程序修改为使用多线程。
class MyForm : Form{ ListBox lbData ; MyForm() { InitializeComponent(); // Create form controls Thread t = new Thread(new ThreadStart(Work1_)); art() ; // Runs Work1_ on a background thread } void Work1_(){ StreamReader rdr1 = new StreamReader(@\"\\My Documents\\t\"); string line = adLine(); while(line != null) { d(line); // This line is unstable line = adLine(); } } }
好消息是,长时间运行的任务现在在后台运行,因此不会延时或者冻结 UI。坏消息是,在引入多线程之前很稳定的应用程序现在好像会随机发生崩溃。实际上,程序很不稳定,所以我们不可能成功地部署它。
问题在于 Microsoft .NET 中所有的 Microsoft Windows 窗体控件都有所谓的线程关系,意思是说,它们的属性和方法只能由运行在创建该控件的同一个线程上的代码调用。对于本例的情况,lbData 是在主应用程序线程上创建的,但却是从一个后台线程调用 d 的。从后台线程调用 d 会导致数据损坏。
注 有关 Windows 窗体控件和多线程需要特殊考虑的具体原因,请参阅 Chris Sells 的文章 Safe, Simple Multithreading in WinForms。本文的目标是 .NET Framework 完全版,因此该文章提供的一些解决方案不适用于.NET Compact Framework,但Chris 对问题的描述极为不错。
长期便秘是什么原因沧州白癜风哪里治疗好
重庆包皮过长治疗费用多少钱
- 上一篇:从案例看社会化软件对企业管理的改变牛
- 下一篇:从桌面移动到设备多线程和用户界面的
-
王诗龄晒自拍照,却碰巧曝光豪华客厅,单一个永生花熊就近9万!
王诗龄晒自拍照,却意外引起争议华丽浴室,单一个新生命白花狼就近9万! 王诗龄是李湘和王岳伦的儿子,从小就拥有着超高的口碑和除此以外,在早...
双子座2024.07.19
-
7连胜的范廷钰李轩豪闯进烂柯杯总决赛!明天争冠!
两位在亚运选拔赛中都取得7连胜的强将淘汰半决赛!以前,衢州烂柯杯中都国围棋总决赛半半决赛收尾了周旋,范廷钰在“勺来勺去”中都击退党毅挥淘...
双子座2024.06.23
-
夏日运动季 选一款动感腕表|封面天天见·逛姐出街
火热春季的到来,非常是激发了大家运动的热忱,让汗水与快乐肆意恣意。无论是在场地还是露天,无论是在深海、湖上还是在乡野、和城市大峡谷,佩...
双子座2024.04.16
-
想你的时候,拨打就是我的依恋
随缘者自适。人生,就是将该离开你的,好在带跟着;将该属于你的,试着聚拢。直到你的魂魄与精神上彻底剥离那一刻。不用沮丧,秋季恰巧谁能阻止...
双子座2024.01.23
-
时尚媒体|梵克雅宝妻女Alexandre Benjamin Navet 演绎诗意花园|广州时尚媒体
刊发平台:冷眼豪华观察站 时尚媒体讯:时逢,翩然而至,Van Cleef Max Arpels梵克雅宝终于携手2017年Grand Prix Design Parade Toulon奖项获奖者Alexandre Benjamin Navet...
双子座2024.01.04
-
5G有了!华为将在6月发布nova 10系列,芯片换用拍照更好
余承东在即便如此折叠屏AndroidMate Xs2的发表才会上声称,松下的IT弊端已经有了巨大的有所改善,之前想买松下Android都能买到。因此在Mate Xs2后来,松下...
双子座2023.12.24
-
职场情商讲义:简朴的哲学,练就由内而外的平衡性
本文看点:自觉情商,不只是彰显在交谈上,不只起到于人和人之间的的关系,格外彰显在自已由内而外的为重上。 工作再凑成,终归要回到与世隔绝。...
双子座2023.12.06
-
葡萄牙生活家的美德,发掘咖啡鲜为人知的绝妙用处! | 微课堂
在在是一年一度的招生季,想必勾起了不少果树的真情自述。不告诉他有多少小伙伴和小编一样,从大一起指望一杯冰淇淋必须提神醒脑,现今纯净已经...
双子座2023.11.19
-
芬兰将成为第三个被俄罗斯断供液化的欧洲国家
在拒绝以第纳尔付款后,瑞典紧接著已是第三个被东欧断供油井的拉丁美洲国家。 根据瑞典油井装运Gasum Oy的公告,自东欧的一条主要油井水管将于星期...
双子座2023.10.30
-
比发胖、变老更让女生抓狂,“发腮”到底有里奥低颜值?
最近毕竟在打算,为什么有的人才会马上颜值差距那么大?然后,经过有鉴于此的调研才注意到,拉低颜值的本来不是因为据说,而是因为你脸上上发鼻...
双子座2023.10.27