C# UWP 应用程序调用了为不同线程编码的接口(interface)

标签 c# multithreading uwp

我有一个 C# UWP 应用程序,其中包含一个我想每 5 秒调用一次的函数。 从按钮调用时该函数运行良好,并且定时器每 5 秒写入调试控制台一次......当我从定时器调用该函数时,所有的事情都变得一团糟。我明白了:

System.Exception 未被用户代码处理 HResult=-2147417842 Message=应用程序调用了为不同线程编码的接口(interface)。 (HRESULT 异常:0x8001010E (RPC_E_WRONG_THREAD))

最佳答案

我假设您的功能与应用程序的用户界面有关。任何接触 UI 的东西都需要在 UI 的调度程序线程上运行(大多数应用程序只有一个,直到您进入多个窗口应用程序)。

您可以使用 Windows.UI.Xaml。 DispatcherTimer在调度程序线程上运行您的计时器。

如果您需要在工作线程上运行代码,然后在调度程序线程上触摸 UI,您可以调用 Dispatcher。 RunAsync将调用编码回调度程序线程。

您通常可以通过 Window.Dispatcher 从您的窗口找到您的调度员.

var ignored = Window.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
   // Do something on the dispatcher thread
});

关于C# UWP 应用程序调用了为不同线程编码的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41233575/

相关文章:

c# - 如何在Application_Error()中知道请求是否在asp.net中是ajax

数组列表中的 C# 对象

c# - HttpWebRequest.GetRequestStream() 在 Windows 7/Vista 下因 SSL 连接超时而中断

java - 有没有办法使用 RxJava 让方法在多个线程上运行

javascript - 如何替换当前打开的文件?

c# - 扩展方法不起作用(快速图形序列化)

multithreading - 如何从另一个线程(Glib线程)取消一个线程?

android - 迫切需要帮助构建 Android 代理服务器

c# - 使用 WinRT 不引发暂停事件

MVVM 灯无法在 Windows 10 通用应用程序中工作