Articles of c# 4.0

为什么相同的代码大小会产生不同大小的exe文件

我有这个代码: namespace ConsoleApplication2 { class Program { static void Main(string[] args) { Console.WriteLine("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); Console.WriteLine("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); Console.WriteLine("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); Console.WriteLine("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); Console.WriteLine("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); Console.WriteLine("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); Console.WriteLine("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); Console.WriteLine("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); Console.WriteLine("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); Console.WriteLine("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); } } } 生成一个exe文件大小5kb。 现在我只是改变它,所以所有的string是不同的: namespace ConsoleApplication2 { class Program { static void Main(string[] args) { Console.WriteLine("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); Console.WriteLine("2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); Console.WriteLine("3aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); Console.WriteLine("4aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); Console.WriteLine("5aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); Console.WriteLine("6aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); Console.WriteLine("7aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); Console.WriteLine("8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); Console.WriteLine("9aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); Console.WriteLine("10aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); } } } 现在的exe文件是7kb。 现在我可以猜测,某些地方某些function是通过使用所有的string作为内存中只有一个string改善内存使用,但我不知道哪些… 所以我的问题是什么部分使这个记忆改善?

loopState.Break(),loopState.Stop()和CancellationTokenSource.Cancel()之间有什么区别?

我有一个简单的问题,我有以下简单的并行for循环。 这for循环是Windows服务的一部分。 当有人停止服务时,我想停止循环。 我可以find三种方法来停止并行,这是如果条件。 什么是停止并行循环的最好方法,有什么区别? CancellationTokenSource cancellationToken = new CancellationTokenSource(); ParallelOptions options = new ParallelOptions(); options.CancellationToken = cancellationToken.Token; Parallel.For(0, maximum_operations, options, (a, loopState) => { { //Do something if(!KeepProcessing) { //loopState.Break(); //loopState.Stop(); cancellationToken.Cancel(); } } });

文件大小 – 磁盘上使用的实际字节数(未分配)

可能重复: 获取磁盘上文件的大小 有没有一种方法来检索磁盘上使用C#/ windows的特定文件的实际字节数? 我的应用程序实现了“监视”文件夹,类似于FileSystemWatcher。 共享存储(networking和光纤通道SAN)上有一些监视文件夹,本地连接的存储上有其他监视文件夹。 通过完全不受我控制的进程将文件复制到监视文件夹中,大小从1 GB到大于500 GB。 由于共享文件系统的性质,希望在“独占”(FileMode.Open,FileAccess.Read,FileShare.None)打开文件时出现exception也不起作用。 这些监视文件夹不应该采取行动,直到一个文件被完全复制/closures,否则下游会出现问题。 为了获得磁盘上使用的“真实”文件大小,我尝试过: System.IO.FileInfo GetFileSizeEx(kernel32 p / invoke) FindFirstFileEx(kernel32 p / invoke) GetCompressedFileSize&GetDiskFreeSpace(kernel32 p / invoke) 任何build议将非常感激。 看来我正在处理Windows操作系统的限制?

如何将字节数组转换为ImageSource for Windows 8.0商店应用程序

我正在开发Windows 8商店应用程序。 我是新的。 我正以字节数组(byte [])的forms接收图像。 我必须将其转换回Image并将其显示在Image Control中。 到目前为止,我在屏幕上有button和图像控制。 当我点击button,我打电话以下function private async Task LoadImageAsync() { byte[] code = //call to third party API for byte array System.IO.MemoryStream ms = new MemoryStream(code); var bitmapImg = new Windows.UI.Xaml.Media.Imaging.BitmapImage(); Windows.Storage.Streams.InMemoryRandomAccessStream imras = new Windows.Storage.Streams.InMemoryRandomAccessStream(); Windows.Storage.Streams.DataWriter write = new Windows.Storage.Streams.DataWriter(imras.GetOutputStreamAt(0)); write.WriteBytes(code); await write.StoreAsync(); bitmapImg.SetSourceAsync(imras); pictureBox1.Source = bitmapImg; } 这工作不正常。 任何想法? […]

从registry中检索Windows密码提示

我一直在尝试以编程方式提取Windows 7的Windowslogin密码提示,并且知道可以从registryHKLM \ SAM \ SAM \ Domains \ Account \ Users \“userkey”\ UserPasswordHint中的以下位置检索它。但是,我无法弄清楚是否有任何方式找出当前login用户编程的用户名?

如何防止用户查杀C#应用

如果您在pipe理员想要结束进程时看到ESET Smart Security或Deep Freeze,则会看到一个错误,指出“拒绝访问” 我如何保护我的C#应用​​程序免于有人杀死它

如何自杀一个控制台的应用程序?

我有一个控制台应用程序创build/启动其他subprocess。 我需要检查一下,如果它本身或他的ProcessChilds死锁,并杀死关联进程树的最年轻。 有了这个目标,他的进程孩子可能有相同的“recursion”algorithm。 这个想法并不是要杀死最年轻的过程,而是要通过命令让自己最年轻的自杀(某种说法)。 有没有一种方法可以在stream程内部调用一个asynchronous方法(也许和他的孩子应该存在相同的方法)来做到这一点? 当然,我可以使用该文件的一个持久性文件和一个“WatchDog / KeepAliveLook”,当它不存在的时候,它会自动执行(自杀),但我相信有一个更清晰的方法可以做到这一点。

读取Windows 7/8中的设备pipe理器的属性字段

我正在开发一个Windows应用程序,它提供了字段详细信息 – > X. 其中X是 – > 右键单击我的电脑> Properties > Device Manager > (select any Item – Say KeyBoard) > Click it > standard PS/2 KeyBoard > double Click standard PS/2 KeyBoard > click the Details Tab > 在财产下有各种领域,如显示名称,问题代码,家长兄弟姐妹等,等等? 我想要得到他们的价值。 我可以使用哪个Windows API。 我这样做的Windows 7以及Windows 8.我希望API将保持不变。另外我有64位机器。 对于我想从“设备pipe理器”中了解详细信息的任何设备,都必须如此。 而且我只是想要所有的操作 – 阅读和没有设置(写),所以我认为我不会有任何问题违反pipe理Rights.PLeasebuild议。 我添加了快照以供参考!例如,我想知道HID USB抱怨鼠标(D0(活动)或D2(睡眠))的当前状态。 我需要得到这个电源状态D0。

在互联网连接或断开连接时收到通知

我有一个在WPF和C#下开发的桌面应用程序。NET 4.0客户端框架,必须显示或隐藏一些数据根据互联网是否可用在PC上。 这意味着如果互联网断开或连接以便作出反应,我必须尽快检测。 (示例可能与无线networking断开连接或拔下网线) 正如我研究了一下,我发现NetworkChange类中存在一个名为NetworkAvailabilityChanged的事件,每当连接发生变化时都会触发事件( 链接到文档 )。 我正在开发一个Windows 8的机器,当我尝试它的事件没有被解雇,但当我在Windows 7上运行应用程序的事件被解雇。 正如在文档中说,与框架4.0的兼容性,该事件是直到Windows 7,但看在文档框架4.5兼容性说windows 8的同样的事件。 问题是,即使我将项目的目标框架切换到4.5(这不是主意),事件不会在Windows 8上触发。 有没有不兼容的问题,我没有意识到? 连接改变时有没有更好的方法来通知? 如果可能的话,我需要在Windows Vista,7和8上运行的Framework 4.0客户端解决scheme

如何在C#中获取不同国家的当前时间

如何使用以下任何参数获取C#中不同国家的当前时间,1.国家名称2.国家时区 这是为Windows / WPF应用程序 ,而不是像Web可以请任何人回答这个? 提前致谢。