我有一个 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/