Articles of C# 2.0

改变C#windows应用程序的主题

在ASP中我们有很多方法来改变主题。 但有没有办法chanigngthe整个主题的Windows应用程序/?

没有足够的内存或没有足够的手柄?

我正在一个大规模的项目中提供了一个自定义的(非常好的和强大的)框架,我们必须使用它来显示表单和视图。 有一个抽象类StrategyEditor(从框架中的某个类派生而来),每当打开一个新的StrategyForm时就实例化这个类。 StrategyForm (一个定制的窗口框架)包含StrategyEditor 。 StrategyEditor包含StrategyTab 。 StrategyTab包含StrategyCanvas 。 这是大类的一小部分,以澄清如果在运行时分配一个StrategyForm对象在内存中将会创build许多对象。 我的组件拥有上面提到的所有这些类,除了StrategyForm其代码不在我的控制之下。 现在,在运行时,用户打开许多策略对象(触发创build新的StrategyForm对象)。 44个策略对象,我们看到由应用程序创build的用户对象句柄(我将从此处使用UOH)达到约20k +,而在registry中,句柄的默认数量为10k。 在这里阅读更多关于用户对象。 在不同的机器上进行testing表明,打开的策略对象的数量对于popup的消息是不同的 – 如果是44则是m / c,而另一个是40。 当我们看到消息popup时,这意味着应用程序将会响应缓慢。 它会变得更糟,只有更less的对象,然后创build窗口框架和后续的对象失败。 我们首先认为这是不够记忆的问题。 但是随后在C#中阅读更多关于new有助于理解如果应用程序内存不足将会抛出exception。 这不是一个内存问题,我觉得(任务pipe理器还显示1.5GB +可用内存。) M / C规格 酷睿2双核2GHz + 4GB内存 80GB +页面文件的可用磁盘空间 虚拟内存集:4000 – 6000 我的问题 Q1。 这看起来像是一个内存问题,我错了,它不是? Q2。 这是否意味着用尽了免费的UOH(正如我所想的那样),并且导致了创build窗口句柄失败? Q3。 我们如何避免加载一个StrategyEditor对象(超出门槛,关注UOH的当前使用)? (我们已经知道如何获取使用的UOH数量,所以不要去那里。)请记住,调用new StrategyForm()不在我的组件的控制范围之内。 Q4。 我有点困惑 – 到底是什么把手到用户对象 ? MSDN是在谈论我们创build的任何对象还是只有一些特定的对象,如窗口句柄,光标句柄,图标句柄? Q5。 究竟是什么原因使用了UOH? (几乎与Q4相同) […]

networking驱动器标签

我试图获得映射为驱动器的一些networking资源的标签。 当我使用DriveInfo.GetDrives()时,本地卷具有预期的VolumeLabel填充参数,但是在networking驱动器中,它是一个空string。 我怎样才能得到这些标签?

validationWinForms文本框(在C#中)

在TextBox_Leave事件中,我需要检查在文本框中input的数字是否在序列号或不。如果不是为了那么我需要显示一条消息作为“数字”丢失 例如 : 在文本框中,我已经input3,然后单击选项卡:我需要显示消息为“数字不是在序号中,数字”1“和”2“丢失”

如何解决winforms错误“在GDI +中发生了一般性错误。 “?

我在我的C#.net赢得窗体应用程序面临以下exception。 在GDI +中发生了一个通用错误。 在System.Drawing.Graphics.CheckErrorStatus(Int32状态) 在System.Drawing.Graphics.DrawRectangle(笔笔,Int32 x,Int32 y,Int32宽度,Int32高度) 在WeifenLuo.WinFormsUI.Docking.DockWindow.OnPaint(PaintEventArgs e) 在System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e,Int16层,布尔disposeEventArgs) 在System.Windows.Forms.Control.WmPaint(Message&m) 在System.Windows.Forms.Control.WndProc(Message&m) 在System.Windows.Forms.ScrollableControl.WndProc(Message&m) 在System.Windows.Forms.Control.ControlNativeWindow.OnMessage(消息&m) 在System.Windows.Forms.Control.ControlNativeWindow.WndProc(消息&m) 在System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd,Int32 msg,IntPtr wparam,IntPtr lparam) 最令人困惑的是,应用程序加载表单(包含一些丰富的graphics,WPF工作等)可能会说约90%的时间表单载入成功时,很less发生。 但很less有这种情况发生,只有在一些机器上,在其他一些机器上,这种forms是百分之百的工作时间,从来没有面对这个例外。 我不明白为什么会发生这种exception,因为它也没有显示导致exception的确切的堆栈跟踪。 请build议如果有任何关于如何处理它的想法。

有一种更简单的方法来在C#控制台应用程序中使用Windows ctrl + v(粘贴)function吗?

我已经构build了一个具有命令解释器的控制台应用程序。 为了使事情更容易,我需要添加支持阅读剪贴板时按CTRL + V按下。 当我按Ctrl + V时 ,在控制台中看到符号^ V ,所以我用剪贴板文本replace那个字符。 一些谷歌search后,我发现剪贴板可以通过System.Windows.Forms.Clipboard.GetText()访问。 我的问题是: 是否有一个更好的解决scheme将剪贴板支持添加到控制台应用程序? 可能没有使用System.Windows.Forms.Clipboard? 也许一个互操作性的电话可以做到这一点? 这个解决scheme的一个缺点是剪贴板只有在线程被定义为[STAThread]时才起作用。 如果我能摆脱^ V符号,也会好很多。 这是当前解决scheme的代码: using System; using System.Threading; using System.Windows.Forms; namespace ConsoleApplication1 { class Program { public static readonly string ClipboardChar = Convert.ToChar(22).ToString(); [STAThread] static void Main(string[] args) { Console.Write("Do some pastin': "); //read Console.ForegroundColor = ConsoleColor.White; string result = […]