Fau*_*ust 5 c# multithreading uwp
我有一个C#UWP应用程序,其中包含我想要每5秒调用一次的函数.从按钮调用时该函数运行正常,并且Timer每5秒钟调试一次调试控制台....当我从Timer调用该函数时,所有函数都会松动.我明白了:
System.Exception未被用户代码处理HResult = -2147417842 Message =应用程序调用了为不同线程编组的接口.(来自HRESULT的异常:0x8001010E(RPC_E_WRONG_THREAD))
我假设你的功能触及了应用程序的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)
您很可能正在使用Timerfrom System.Threading。该计时器的事件不会被视为常规 GUI 事件,如果您通过该计时器调用的方法访问 GUI 项,则会导致问题,因为该线程不是 GUI 项的所有者。
使用Timer来自System.Windows.Forms. 该计时器可以访问您的 GUI 项目。
| 归档时间: |
|
| 查看次数: |
5026 次 |
| 最近记录: |