在Windows Phone和Metro上通过分派器调用(译文)
By S.F.
本文链接 https://www.kyfws.com/news/invoking-through-the-dispatcher-on-windows-phone-a/
版权声明 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
- 2 分钟阅读 - 574 个词 阅读量 0在Windows Phone和Metro上通过分派器调用(译文)
原文地址:https://www.codeproject.com/Articles/368983/Invoking-Through-the-Dispatcher-on-Windows-Phone-a
原文作者:Joel Ivory Johnson
译文由本站翻译
前言
在Windows Phone和Metro上通过分派器调用
在Windows平台上,存在一个规则,即您不能从辅助线程修改UI元素.在基于Microsoft XAML的平台上,大多数UI对象上都存在一个名为Dispatcher的成员,该成员可用于封送对适当线程的调用. 在Windows Phone 7和Windows 8上,调用此线程的方式不同.我最近正在处理一些需要在两个平台上都进行编译的代码,并希望将必须打包在条件编译块中的代码量减到最少.为此,我制作了一个方法来处理调度.该方法本身包含条件编译块,但是由于这种方法,当我需要在UI线程上执行操作时,我不需要这些块.
public void DispatchInvoke(Action a)
{
#if SILVERLIGHT
if (Dispatcher == null)
a();
else
Dispatcher.BeginInvoke(a);
#else
if ((Dispatcher != null) && (!Dispatcher.HasThreadAccess))
{
Dispatcher.InvokeAsync(
Windows.UI.Core.CoreDispatcherPriority.Normal,
(obj, invokedArgs) => { a(); },
this,
null
);
}
else
a();
#endif
}
该代码将针对Windows Phone 7和Windows 8 Metro进行编译,而无需进行任何更改.无论使用哪种平台,使用代码都是相同的.
DispatchInvoke(()=>
{
//your operations go here
TextBox1.Text="My Text";
}
);
许可
本文以及所有相关的源代码和文件均已获得The Code Project Open License (CPOL)的许可。
Windows-Phone-7 新闻 翻译