C#UWP该应用程序调用了一个为不同线程编组的接口

Fau*_*ust 5 c# multithreading uwp

我有一个C#UWP应用程序,其中包含我想要每5秒调用一次的函数.从按钮调用时该函数运行正常,并且Timer每5秒钟调试一次调试控制台....当我从Timer调用该函数时,所有函数都会松动.我明白了:

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

Rob*_*SFT 9

我假设你的功能触及了应用程序的UI.触摸UI的任何东西都需要在UI的调度程序线程上运行(大多数应用程序只有一个,直到你进入多个窗口应用程序).

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

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

您通常可以通过Window.Dispatcher从Window中找到您的调度程序.

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


Cod*_*shi 1

您很可能正在使用Timerfrom System.Threading。该计时器的事件不会被视为常规 GUI 事件,如果您通过该计时器调用的方法访问 GUI 项,则会导致问题,因为该线程不是 GUI 项的所有者。

使用Timer来自System.Windows.Forms. 该计时器可以访问您的 GUI 项目。