草庐IT

行为树

全部标签

c# - 为什么关闭使用 AllocConsole 启动的控制台会导致我的整个应用程序退出?我可以改变这种行为吗?

我想要发生的是控制台窗口消失,或者更好的是它被隐藏,但我希望我的应用程序继续运行。那可能吗?我希望能够使用Console.WriteLine并将控制台用作输出窗口。我希望能够隐藏和显示它,我不希望整个应用程序仅仅因为控制台关闭而死掉。编辑代码:internalclassSomeClass{[DllImport("kernel32")]privatestaticexternboolAllocConsole();privatestaticvoidMain(){AllocConsole();while(true)continue;}}编辑2我在这里尝试了公认的解决方案[Capturecons

c# - 这种带有隐式转换运算符的 Nullable<T> 行为的理由是什么

我在Nullable之间的交互中遇到了一些有趣的行为和隐式转换。我发现从值类型为引用类型提供隐式转换允许Nullable当我期望编译错误时,将类型传递给需要引用类型的函数。下面的代码演示了这一点:staticvoidMain(string[]args){PrintCatAge(newCat(13));PrintCatAge(12);int?cat=null;PrintCatAge(cat);}privatestaticvoidPrintCatAge(Catcat){if(cat==null)System.Console.WriteLine("Whatcat?");elseSystem.

c# - 这种带有隐式转换运算符的 Nullable<T> 行为的理由是什么

我在Nullable之间的交互中遇到了一些有趣的行为和隐式转换。我发现从值类型为引用类型提供隐式转换允许Nullable当我期望编译错误时,将类型传递给需要引用类型的函数。下面的代码演示了这一点:staticvoidMain(string[]args){PrintCatAge(newCat(13));PrintCatAge(12);int?cat=null;PrintCatAge(cat);}privatestaticvoidPrintCatAge(Catcat){if(cat==null)System.Console.WriteLine("Whatcat?");elseSystem.

c# - .NET Math.Log10() 在不同机器上的行为不同

我发现运行Math.Log10(double.Epsilon)将在机器A上返回大约-324,但在机器B上将返回-Infinity。它们最初的行为方式相同,返回-324。两台机器一开始都使用相同的操作系统(WinXPSP3)和.NET版本(3.5SP1)。机器B上可能有Windows更新,但除此之外没有已知的变化发生。什么可以解释行为上的差异?评论中讨论的更多细节:机器ACPU是32位IntelCoreDuoT25002GHz机器BCPU是32位IntelP42.4GHz使用多个第3方组件从在大型应用程序中运行的代码收集的结果。但是,相同的.exe和组件版本在两台机器上运行。在机器B上的

c# - .NET Math.Log10() 在不同机器上的行为不同

我发现运行Math.Log10(double.Epsilon)将在机器A上返回大约-324,但在机器B上将返回-Infinity。它们最初的行为方式相同,返回-324。两台机器一开始都使用相同的操作系统(WinXPSP3)和.NET版本(3.5SP1)。机器B上可能有Windows更新,但除此之外没有已知的变化发生。什么可以解释行为上的差异?评论中讨论的更多细节:机器ACPU是32位IntelCoreDuoT25002GHz机器BCPU是32位IntelP42.4GHz使用多个第3方组件从在大型应用程序中运行的代码收集的结果。但是,相同的.exe和组件版本在两台机器上运行。在机器B上的

c# - MemoryCache AbsoluteExpiration 行为奇怪

我正在尝试在.net4.5中使用MemoryCache来跟踪并自动更新各种项目,但似乎无论我将什么设置为AbsoluteExpiration它总是只会在15秒或更长时间后过期。我希望缓存项每5秒过期一次,但它总是至少在15秒后过期,如果我将过期时间移出,它最终会变成大约15秒+我的刷新间隔,但绝不会少于超过15秒。是否有一些我没有看到的内部定时器分辨率?我查看了一些反射(reflect)的System.Runtime.Caching.MemoryCache代码,没有什么特别的,而且我在互联网上找不到其他人遇到这个问题。我在下面有一个非常基本的例子来说明这个问题。我想要的是CacheEn

c# - MemoryCache AbsoluteExpiration 行为奇怪

我正在尝试在.net4.5中使用MemoryCache来跟踪并自动更新各种项目,但似乎无论我将什么设置为AbsoluteExpiration它总是只会在15秒或更长时间后过期。我希望缓存项每5秒过期一次,但它总是至少在15秒后过期,如果我将过期时间移出,它最终会变成大约15秒+我的刷新间隔,但绝不会少于超过15秒。是否有一些我没有看到的内部定时器分辨率?我查看了一些反射(reflect)的System.Runtime.Caching.MemoryCache代码,没有什么特别的,而且我在互联网上找不到其他人遇到这个问题。我在下面有一个非常基本的例子来说明这个问题。我想要的是CacheEn

c# - 固定对象时的 GC 行为

浏览PinnableObjectCache的代码时从mscorlib中,我遇到了以下代码:for(inti=0;i这让我想知道对插头的引用是什么意思?在尝试将对象固定在内存中时,GC不会固定为该对象指定的特定地址吗?这个plug行为实际上在做什么,为什么需要在对象之间“隔开”? 最佳答案 好吧,在多次尝试从“内幕消息”人士那里获得官方回复后,我决定自己做一些实验。我尝试做的是重现我有几个固定对象和它们之间的一些未固定对象的场景(我使用了byte[])来尝试创建效果未固定的对象不会移动到GC堆内的更高代。代码在我的IntelCorei

c# - 固定对象时的 GC 行为

浏览PinnableObjectCache的代码时从mscorlib中,我遇到了以下代码:for(inti=0;i这让我想知道对插头的引用是什么意思?在尝试将对象固定在内存中时,GC不会固定为该对象指定的特定地址吗?这个plug行为实际上在做什么,为什么需要在对象之间“隔开”? 最佳答案 好吧,在多次尝试从“内幕消息”人士那里获得官方回复后,我决定自己做一些实验。我尝试做的是重现我有几个固定对象和它们之间的一些未固定对象的场景(我使用了byte[])来尝试创建效果未固定的对象不会移动到GC堆内的更高代。代码在我的IntelCorei

c# - 更改了 .NET 4.5 中 string.Empty(或 System.String::Empty)的行为

短版:C#代码typeof(string).GetField("Empty").SetValue(null,"Helloworld!");Console.WriteLine(string.Empty);编译并运行时,给出输出"Helloworld!"在.NET4.0及更早版本下,但提供""在.NET4.5和.NET4.5.1下。如何像这样忽略对字段的写入,或者谁重置该字段?加长版:我从来没有真正理解为什么string.Empty字段(也称为[mscorlib]System.String::Empty)不是const(又名literal),参见“Whyisn'tString.Emptya