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改善内存使用,但我不知道哪些… 所以我的问题是什么部分使这个记忆改善?

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

我有一个控制台应用程序创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可以请任何人回答这个? 提前致谢。

幻灯片壁纸Windows 7

如何以编程方式设置Windows 7 Wallpaper幻灯片? 设置一个正常的壁纸 [DllImport("user32.dll", CharSet = CharSet.Auto)] private static extern Int32 SystemParametersInfo(UInt32 uiAction, UInt32 uiParam, String pvParam, UInt32 fWinIni); private static UInt32 SPI_SETDESKWALLPAPER = 20; private static UInt32 SPIF_UPDATEINIFILE = 0x1; public void SetImage(string filename) { SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, filename, SPIF_UPDATEINIFILE); } 我到目前为止发现的: 有幻灯片的ini文件 C:\用户\ CurrentUser \应用程序数据\漫游\微软\的Windows \主题\ 在幻灯片放映过程中,壁纸必须位于以下文件夹中: C:\用户\ CurrentUser \应用程序数据\漫游\微软\的Windows \主题\ TranscodedWallpaper.jpg (在幻灯片放映过程中,文件自动更改)

从自己的线程停止IIS网站

我正在使用下面的代码来阻止我的WCF服务从它自己的线程来更新我的服务使用的一些文件。 try { var server = new ServerManager(); var site = server.Sites.FirstOrDefault(s => s.Name == "Default Web Site"); if (site != null) { Thread.Sleep(1000); site.Stop(); if (site.State == ObjectState.Stopped) { Thread.Sleep(5000); } site.Start(); } else { throw new FaultException("Server Are Trying To Stop Is not Found"); } } catch (Exception ex) { throw new FaultException(ex.Message); […]

如何检测进程开始和结束在Windows中使用C#?

我有一个良好的工作经验与c#,但现在我想开发一个简单的(可能是一个控制台应用程序)软件,只是检测过程的名称和时间开始或结束在我的电脑上。 例如(我假设我的小应用程序已经运行),如果用户打开Firefox,那么它应该只是插入firefox.exe到数据库中的时间,如果用户closures它,那么它也这样做。 和上面一样,如果用户打开记​​事本,那么它应该插入notepad.exe与时间等。 我知道如何在数据库中插入值,但我只是需要你的帮助,以确定过程/程序开始或结束在我的系统上。 诚实地说,我从来没有开发过这种应用程序之前,所以我不知道,它可以使用控制台应用程序或我需要制作一个Windows服务应用程序等。 所以请提供你的答案只是考虑到我作为一个初学者。 在C#的一部分,我能够理解它,所以需要担心。 我正在使用Visual Studio 2010与.net 4.0 -提前致谢

在C#中创buildCron作业

我在C#中编写一个调度types的应用程序,并允许用户存储他们想要在特定时间运行的任务。 现在我给他们指定运行频率(每日/每周/每月)以及指定时间的选项,然后存储在数据库中。 我有点麻烦,只是把我的头围绕在这个背后的伪代码上,我正在寻找一些关于如何实现它的build议。 我每60秒运行一个重复计时器来检查每个任务是否需要运行,但是当我需要使用date/时间并且添加循环日(每天/每周/等)时,似乎总是碰到路障它甚至更多。

在Windows服务中模拟用户

我正在尝试模拟一个Windows服务中的域用户,服务以本地系统帐户login。 到目前为止,我只能通过logging服务并使用用户凭证来设置进程来实现这个function,如下所示。 ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = CommandDetails.Command; startInfo.WorkingDirectory = Settings.RoboCopyWorkingDirectory; startInfo.Arguments = commandLine; startInfo.UseShellExecute = false; startInfo.CreateNoWindow = true; startInfo.RedirectStandardError = true; startInfo.RedirectStandardOutput = true; // Credentials startInfo.Domain = ImperDomain; startInfo.UserName = ImperUsername; startInfo.Password = ImperPasswordSecure; process = Process.Start(startInfo); 我的目标是没有服务login域用户,而是作为本地系统,因为域帐户密码得到重置。 当我使用本地系统时,我得到的访问被拒绝 任何想法如何做到这一点? StackTace Access is denied at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo) at System.Diagnostics.Process.Start() at […]