Tag: C#的

为什么Environment.Exit()不再终止程序?

这是我前几天发现的事情,我从这个问题得到确认,不仅限于我的机器。 最容易的方法是通过启动一个Windows窗体应用程序,添加一个button并写下如下代码: private void button1_Click(object sender, EventArgs e) { MessageBox.Show("yada"); Environment.Exit(1); // Kaboom! } Exit()语句执行后程序失败。 在Windows窗体上,您会看到“创build窗口句柄时出错”。 启用不受pipe理的debugging使得有点清楚发生了什么事情。 COM模式循环正在执行,并允许传递WM_PAINT消息。 这是致命的处置forms。 我迄今为止收集的唯一事实是: 它不仅限于使用debugging器运行。 没有一个也是失败的。 WER崩溃对话也显示了两次 。 这与这个过程的缺点没有任何关系。 wow64图层是非常臭名昭着的,但是一个AnyCPU构build崩溃了同样的方式。 它与.NET版本没有任何关系,4.5和3.5以同样的方式崩溃。 退出代码无关紧要。 在调用Exit()之前调用Thread.Sleep()不能修复它。 这发生在64位版本的Windows 8上,而Windows 7似乎也没有受到同样的影响。 这应该是比较新的行为,我以前没有见过。 我看不到通过Windows更新提供的相关更新 ,尽pipe更新历史在我的机器上不再是准确的。 这是严重的打破行为。 您可以在AppDomain.UnhandledException的事件处理程序中编写这样的代码,并以相同的方式崩溃。 我特别感兴趣的是你可以做些什么来避免这种崩溃。 特别是AppDomain.UnhandledExceptionscheme困扰着我; 没有很多方法来终止一个.NET程序。 请注意调用Application.Exit()或Form.Close()在UnhandledException的事件处理程序中无效,因此它们不是解决方法。 更新:Mehrdad指出,终结者线程可能是问题的一部分。 我想我正在看到这一点,并且也看到了CLR给予终结器线程完成执行的2秒超时的一些证据。 终结器在NativeWindow.ForceExitMessageLoop()中。 这里有一个IsWindow()Win32函数,大致对应于代码位置,在32位模式下查看机器代码时偏移0x3c。 看来IsWindow()是死锁的。 我不能得到一个好的内部堆栈跟踪,但是debugging器认为P / Invoke调用刚刚返回。 这很难解释。 如果你可以得到更好的堆栈跟踪,那么我很乐意看到它。 矿: System.Windows.Forms.dll!System.Windows.Forms.NativeWindow.ForceExitMessageLoop() + 0x3c […]

是否有可能将XML反序列化为List <T>?

鉴于以下XML: <?xml version="1.0"?> <user_list> <user> <id>1</id> <name>Joe</name> </user> <user> <id>2</id> <name>John</name> </user> </user_list> 和以下class级: public class User { [XmlElement("id")] public Int32 Id { get; set; } [XmlElement("name")] public String Name { get; set; } } 是否有可能使用XmlSerializer反序列化到List<User>的XML? 如果是这样,我需要使用什么types的附加属性,或者我需要使用什么额外的参数来构造XmlSerializer实例? 一个数组( User[] )将是可以接受的,如果有点不太好。

为什么我可以像在C#中的数组初始化列表?

今天我惊讶地发现,在C#中我可以这样做: List<int> a = new List<int> { 1, 2, 3 }; 我为什么要这样做? 什么构造函数被调用? 我怎样才能用我自己的课程呢? 我知道这是初始化数组的方式,但数组是语言项目和列表是简单的对象…

如何禁用编辑combobox中的元素?

我在ComboBox(WinForms与C#)中有一些元素。 我希望他们的内容是静态的,以便用户在运行应用程序时不能更改其内的值。 我也不希望用户添加新的值到combobox

string比较:InvariantCultureIgnoreCase与OrdinalIgnoreCase?

哪个会更好的代码: int index = fileName.LastIndexOf(".", StringComparison.InvariantCultureIgnoreCase); 要么 int index = fileName.LastIndexOf(".", StringComparison.OrdinalIgnoreCase);

目标文件中未parsing的外部符号

在Visual Studio编码过程中,我得到了一个无法parsing的外部符号错误,我不知道该怎么做。 我不知道什么是错的。 你能解释我吗? 我应该在哪里寻找什么样的错误? 1>Form.obj : error LNK2019: unresolved external symbol "public: class Field * __thiscall Field::addField(class Field *)" (?addField@Field@@QAEPAV1@PAV1@@Z) referenced in function "public: void __thiscall Form::parse(class std::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> > &)" (?parse@Form@@QAEXAAV?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 1>Form.obj : error LNK2019: unresolved external symbol "public: virtual void __thiscall Field::parse(class std::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> > &)" (?parse@Field@@UAEXAAV?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function […]

从文件名string中删除文件扩展名

如果我有一个string说"abc.txt" ,是否有一个快速的方法来获取只是"abc"的子string? 我不能做一个fileName.IndexOf('.')因为文件名可能是"abc.123.txt"什么的,我显然只是想摆脱扩展名(即"abc.123" )。

铿锵VS GCC为我的Linux开发项目

我在上大学,我们正在使用一个项目C.我们已经探索了GCC和Clang,并且Clang似乎比GCC更加用户友好。 因此,我想知道使用clang(而不是GCC)在Linux上用C和C ++进行开发的优缺点是什么? 在我的情况下,这将用于学生级别的程序,而不是生产。 如果我使用Clang,我应该使用GDB进行debugging并使用GNU Make,或者使用另一个debugging器并生成实用程序?

你如何在C#中创build一个asynchronous方法?

我读过的每篇博文都告诉你如何在C#中使用一个asynchronous方法,但由于某种奇怪的原因,从来没有解释如何构build自己的asynchronous方法来使用。 所以我现在有这个代码消耗我的方法: private async void button1_Click(object sender, EventArgs e) { var now = await CountToAsync(1000); label1.Text = now.ToString(); } 而我写的这个方法就是CountToAsync : private Task<DateTime> CountToAsync(int num = 1000) { return Task.Factory.StartNew(() => { for (int i = 0; i < num; i++) { Console.WriteLine("#{0}", i); } }).ContinueWith(x => DateTime.Now); } 是这样,使用Task.Factory ,写一个asynchronous方法的最好方法,或者我应该以另一种方式写这个?

什么是“服务包含”在csproj文件中?

在C#解决scheme中,我添加了一个现有的项目。 之后,Visual Studio在其他.csproj文件中添加了以下条目: <ItemGroup> <Service Include="{B4F97281-0DBD-4835-9ED8-7DFB966E87FF}" /> </ItemGroup> 这是用来干嘛的? 我可以删除它吗?