本文介绍了任务和STA / MTA线程模型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


在我们的Outlook集成(Managed COM AddIn C#)中,我们正在使用Tasks在后台执行一些工作。



Beim aufrufenden Thread muss es sich um einen STA-Thread handeln ,dadiefürvieleKomponentenderBenutzeroberflächeerforderlichist。 (我的翻译:调用线程必须是STA-Thread,因为某些UI组件需要这样做

    bei System.Windows.Input.InputManager..ctor()

    bei System.Windows.Input.InputManager.GetCurrentInputManagerImpl()

    bei PresenceProfiles。< OnIsVisibleChanged> d__1.MoveNext()

--- EndederStappelüberwachungvomvorhergehenden Ort,dem dieAusnahmeausgelöstwurde---

    bei System.Runtime.CompilerServices.AsyncMethodBuilderCore。<> c。< ThrowAsync> b__6_1(对象状态)

    bei System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(对象状态)

    bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext,ContextCallback callback,Object state,Boolean preserveSyncCtx)

    bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback callback,Object state,Boolean preserveSyncCtx)

    bei System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()

    bei System.Threading.ThreadPoolWorkQueue.Dispatch()

    bei System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()


我认为问题是,在任务完成后完成后,以下说明不会在Outlook主线程上下文中执行。如何强制执行任务完成后执行的指令在主线程上下文中执行。


祝你好运b
Christian


解决方案


Hi,

in our Outlook integration (Managed COM AddIn C#) we are using Tasks to execute some work in the background.

Well, on machines from one of our customers we receive the following exception, when one of our Dialogs is opened in Outlook.

Beim aufrufenden Thread muss es sich um einen STA-Thread handeln, da dies für viele Komponenten der Benutzeroberfläche erforderlich ist. (my translation: The calling Thread must be a STA-Thread, because this is required for some UI components)
   bei System.Windows.Input.InputManager..ctor()
   bei System.Windows.Input.InputManager.GetCurrentInputManagerImpl()
   bei PresenceProfiles.<OnIsVisibleChanged>d__1.MoveNext()
--- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde ---
   bei System.Runtime.CompilerServices.AsyncMethodBuilderCore.<>c.<ThrowAsync>b__6_1(Object state)
   bei System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
   bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   bei System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
   bei System.Threading.ThreadPoolWorkQueue.Dispatch()
   bei System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

I think, that the problem is, that after a Task is finished, the following instructions are not executed in Outlooks main thread context. How do I force, that the instructions, that are executed after a task is finished are executed in the main thread context.

Best regards
Christian

解决方案


这篇关于任务和STA / MTA线程模型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-12 02:13