CLR 全面透彻解析: 使用 CoreCLR 编写 Silverlight
2008-10-26 11:49:13 来源:WEB开发网每个人或多或少都了解一些全球化问题:许多欧洲地区将逗号用作小数点;中文数字将每四位数分为一组 (1000,0000),等等。.NET Framework 在内部实施全球化功能,因此它可以在多个领域正常运行。为此,它包含所有支持区域的全球化数据,使以 .NET 为目标的应用程序在所有支持的 Windows 版本中行为一致。但是,这也存在一些弊端。CLR 必须包含大型数据表,而这些数据通常会随着时间的流逝而失效。此外,这些数据都以 Windows 为中心,因此某些 .NET 区域中的数据与 Mac OS X 中相同区域不同。鉴于这些原因,CoreCLR 不包含自己的全球化数据。相反,System.Globalization.CultureInfo 可以使用宿主操作系统提供的全球化功能。因此,Silverlight 应用程序在 Mac OS X 中运行时,其行为更像 Mac,而在 Windows 中运行时,其行为更像 Windows 应用程序。
总之,我们已经尽力在 CLR、.NET Compact Framework 和 Silverlight 之间维护类似的 API 外围应用,但在 BCL 中仍分散着其他细微差异。例如,由于 Silverlight 中有一个单独的 UI 线程,因此它还包含一个单独的 Dispatcher 对象以承载 UI 的工作项队列。借助 Dispatcher,您可以通过非 UI 线程更新 UI。此代码允许您使用在其他线程(如后台线程)中创建的集合更新 UI 元素 — MyListBox:
MyListBox.Dispatcher.BeginInvoke(() => MyListBox.ItemsSource = MyItems);
我们建议在 Silverlight 中使用 System.ComponentModel.BackgroundWorker,因为它可以在完成时封装更新的 UI,但出于兼容性考虑,我们仍将低级别线程 API 包括在内,如 System.Threading.ThreadPool.QueueUserWorkItem 和 System.Threading.Monitor.Enter。
更多精彩
赞助商链接