• 为什么Thread.Join不让通过COM消息?

  • 本文关于 c#,多线程multithreading,com,clr,sta
  • CodeGo.net > 为什么Thread.Join不让通过COM消息?
  •  

    为什么Thread.Join不让通过COM消息?



    c# 多线程multithreading com clr sta
    我运行多线程代码,执行以下操作。 在一个STA线程,我创建了一个 “工人”的线程,并运行它。 STA线程然后等待工作人员 线程退出。 在一个STA COM代理工作线程调用 对象在STA线程上,然后退出。 在步骤2中,I'Thread.Join()等待工作线程退出。 在对Thread.Join()说,它阻塞调用线程 CodeGo.net,直到某个线程终止,在继续执行标准的COM和SendMessage消息泵。 但是,会发生什么是工作线程块'永远'的COM调用。 STA线程永远服务于COM调用,而它被阻塞的工作线程调用Thread.Join()。 我预计在STA线程能够同时阻断对Thread.Join维修COM调用。 谁能解释可能发生的事吗? 下面是本机调用堆栈的调用Thread.Join(跑VS在本地代码调试模式,所以差异可能是由于WinDbg的?):
    ntdll.dll!_KiFastSystemCallRet@0() 	
    ntdll.dll!_ZwWaitForMultipleObjects@20() + 0xc bytes
    kernel32.dll!_WaitForMultipleObjectsEx@20() - 0x51 bytes	
    user32.dll!_RealMsgWaitForMultipleObjectsEx@20() + 0xd7 bytes	
    ole32.dll!CCliModalLoop::BlockFn() + 0x8c bytes	
    ole32.dll!_CoWaitForMultipleHandles@20() - 0x382a bytes	
    mscorwks.dll!NT5WaitRoutine() + 0x39 bytes	
    mscorwks.dll!MsgWaitHelper() + 0x97 bytes	
    mscorwks.dll!Thread::DoAppropriateAptStateWait() + 0x51ae9 bytes	
    mscorwks.dll!Thread::DoAppropriateWaitWorker() + 0x104 bytes	
    mscorwks.dll!Thread::DoAppropriateWait() + 0x40 bytes	
    mscorwks.dll!Thread::JoinEx() + 0x77 bytes	
    mscorwks.dll!ThreadNative::DoJoin() + 0xa6 bytes	
    mscorwks.dll!ThreadNative::Join() + 0xa8 bytes
    
    下面是在文章中,对于调用Thread.Join STA线程显示的调用堆栈:
    它似乎从我所看到的最后一次通话出现分歧。
    
    ntdll!NtWaitForMultipleObjects+0xa
    KERNEL32!WaitForMultipleObjectsEx+0x10b
    USER32!RealMsgWaitForMultipleObjectsEx+0x129
    USER32!MsgWaitForMultipleObjectsEx+0x46
    ole32!CCliModalLoop::BlockFn+0xbb
    ole32!CoWaitForMultipleHandles+0x145
    mscorwks!NT5WaitRoutine+0x77
    mscorwks!MsgWaitHelper+0xed
    mscorwks!Thread::DoAppropriateAptStateWait+0x67
    mscorwks!Thread::DoAppropriateWaitWorker+0x195
    mscorwks!Thread::DoAppropriateWait+0x5c
    mscorwks!Thread::JoinEx+0xa5
    mscorwks!ThreadNative::DoJoin+0xda
    mscorwks!ThreadNative::Join+0xfa
    
    下面是文章的调用堆栈的MTA线程:
    ntdll!NtWaitForMultipleObjects+0xa
    KERNEL32!WaitForMultipleObjectsEx+0x10b
    mscorwks!WaitForMultipleObjectsEx_SO_TOLERANT+0xc1
    mscorwks!Thread::DoAppropriateAptStateWait+0x41
    mscorwks!Thread::DoAppropriateWaitWorker+0x195
    mscorwks!Thread::DoAppropriateWait+0x5c
    mscorwks!Thread::JoinEx+0xa5
    mscorwks!ThreadNative::DoJoin+0xda
    mscorwks!ThreadNative::Join+0xfa
    

    本文地址 :CodeGo.net/1482663/
    -------------------------------------------------------------------------------------------------------------------------
    1.是你的工作线程在MTA中Thread.Join操作将不执行抽水如果当前是一个MTA。在MSDN上是一种误导在这种情况下,它是标准的一个MTA不泵。 下面是关于这个问题的文章 编辑重读的问题了一下,只见那阻塞的线程是STA线程。离开了答案作为一个连续的情况下,它可以帮助人们在时尚击中问题的说明
    本文标题 :为什么Thread.Join不让通过COM消息?
    本文地址 :CodeGo.net/1482663/
    1. Socket进程阻塞AcceptSocket()卡死!救
    2. 无法读取的True Type字体文件在我的WPF应用程序!
    3. C# winform中的flowlayoutpanel
    4. 设置ComboBox.SelectedIndexrestOneWayToSourceconstraints力ComboBox.SelectedItem
    5. winform传参问题
    6. 如何修改在数据表中的数据在C#
    7. 程序打包时提示"配置文件app.config正用于配置所有的可执行文件"
    8. 如何使用。NET Compact Framework中播放视频?
    9. 有想不通,想来问下
    10. IHTMLTxtRange.pasteHTML不会取代旧的HTML

     
    

    Copyright © 2017 CodeGo.net
    http://codego.net/xinwen/ 足球比分网 足球比分 医药招商网 邵阳县新闻