为啥我的线程在“Main”中的任何内容可以运行之前就退出了?

Posted

技术标签:

【中文标题】为啥我的线程在“Main”中的任何内容可以运行之前就退出了?【英文标题】:Why am I getting that my thread exits before anything in `Main` can run?为什么我的线程在“Main”中的任何内容可以运行之前就退出了? 【发布时间】:2016-03-05 20:02:43 【问题描述】:

我有一个简单的控制台应用程序

using System;
using System.Drawing;
using System.Windows;
using System.Windows.Media;

namespace ConsoleApplicationFont

    class Program
    
        static void Main(string[] args)
        
            Console.WriteLine("At least we got here");//TEST
            try
            
                var FF = new FontFamily();
                foreach (var item in FF.FamilyNames.Keys) 
                    Console.WriteLine(item.ToString());
            
            catch ( Exception e )
            
                Console.WriteLine("Error: 0", e.Message);
            
        
    

当前正在输出的

线程 0x1b9c 已退出,代码为 259 (0x103)。线程 0x2438 已以代码 0 (0x0) 退出。线程 0x444 已退出代码 259 (0x103)。线程 0x21ec 已退出,代码为 259 (0x103)。这 线程 0x266c 已退出,代码为 259 (0x103)。程序'[7564] SeeSystemDotDrawingFonts.vshost.exe' 已退出,代码为 0 (0x0)。

并且输出与Main 的主体没有任何关系,因为即使它全部输出我也能得到它。这里有什么问题,我该如何调试这些类型的情况?

【问题讨论】:

后台会有很多线程 - 一个用于终结器等 - 我不会担心它们 我认为你在错误的地方寻找你的输出......呵呵...... 来自 MSDN:“当您想以编程方式创建复合字体时,请使用此默认构造函数。这意味着您不必为构造函数指定字体系列名称,但您必须将集合填充到在使用构造的实例之前的 FamilyMaps 和 FamilyNames 集合。” msdn.microsoft.com/en-us/library/ms602322%28v=vs.110%29.aspx 我预计会出现编译器警告,因为 FontFamily 是在 System.Drawing 和 System.Windows.Media 中定义的 @devio 不是警告,错误。此代码无法编译 【参考方案1】:

我认为您正在寻找这样的东西:

    class Program
    
        static void Main(string[] args)
        
            Console.WriteLine("At least we got here");//TEST
            try
            
                var  installedFontCollection = new InstalledFontCollection();
                var fontFamilies = installedFontCollection.Families;
                var count = fontFamilies.Length;
                for (int j = 0; j < count; ++j)
                
                    Console.WriteLine(fontFamilies[j].Name);
                
            
            catch (Exception e)
            
                Console.WriteLine("Error: 0", e.Message);
            
            Console.ReadKey();
        
    

https://msdn.microsoft.com/en-us/library/0yf5t4e8(v=vs.110).aspx

【讨论】:

以上是关于为啥我的线程在“Main”中的任何内容可以运行之前就退出了?的主要内容,如果未能解决你的问题,请参考以下文章

我的程序在进入main()函数之前退出

main 函数不返回任何内容。为啥? [复制]

为啥我的线程被临界区阻塞,没有被任何东西占用?

为啥 Main 函数上的 Sleep() 会停止所有线程?

线程“main”java.sql.SQLException中的异常:未选择数据库[重复]

为啥我在代码中的线程“main”java.lang.StringIndexOutOfBoundsException 错误中收到异常?