当前位置: 首页 > 编程语言 > C#

为什么一个基本的单线程C#控制台应用程序需要3个线程?Share

时间:2023-04-10 12:12:47 C#

为什么一个基本的单线程C#控制台应用程序需要3个线程?我使用Console.ReadLine语句在c#中创建了一个控制台应用程序。在VisualStudio中运行此应用程序并进入调试器会在线程窗口中显示7个线程(6个工作线程,一个带有.NETSystemEvents,一个带有vshost.RunParkingWindow和主线程)。当我在VisualStudio之外运行应用程序时,我在Windows任务管理器中看到总共3个线程。为什么这么多,我期待1个线程?生产的其他产品是什么?如果您正在运行.NET应用程序,我相信除了主线程之外,您总是会获得JIT(即时编译器)线程以及GC(垃圾收集)线程(主要是休眠)。您不必担心:如果您不显式使用它们,您将不会在主线程以外的线程中运行任何代码。其他主题是:3个线程共享一个标准输入吗?理论上是的,但其他人不会使用它,除非你在析构函数或ThreadPool.QueueUserWorkItem中使用Console.ReadLine,所以不要担心你会在主线程中获取所有数据有一种方法可以移动SystemEvents通知程序进入你的线程:publicstaticclassThreadingHelper_NativeMethods{[DllImport("user32.dll")]publicstaticexternboolIsGUIThread(boolbConvert);}//此代码强制将.NETBroadcastEventWindow初始化到UI线程。//http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/fb267827-1765-4bd9-ae2f-0abbd5a2ae22if(ThreadingHelper_NativeMethods.IsGUIThread(false)){Microsoft.Win32.SystemEvents.InvokeOnEventsThread(新方法调用者(委托(){intx=0;}));不要忘记终结器线程!如果您不执行任何线程或线程池工作,那么这些线程中只有一个是您的。其余的由运行时创建,其库被垃圾收集。线程的数量会根据你使用的库、内核的数量等而有所不同。这些线程可以共享一个上下文,比如控制台,但你只需要担心同步你自己的线程和构造。以上是C#学习教程:Why3threadsforabasicsingle-threadedc#consoleapplication?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: