摘要:
现在假设我们想要获得多个订阅者的返回值,以List<string>的形式返回,该如何做呢?我们应该记得委托定义在编译时会生成一个继承自MulticastDelegate的类,而这个MulticastDelegate又继承自Delegate,在Delegate内部,维护了一个委托链表,链表上的每一个元素,为一个只包含一个目标方法的委托对象。而通过Delegate基类的GetInvocationList()静态方法,可以获得这个委托链表。随后我们遍历这个链表,通过链表中的每个委托对象来调用方法,这样就可以分别获得每个方法的返回值:class Program4 { static void 阅读全文
摘要:
Observer设计模式简介上面的例子显然能完成我们之前描述的工作,但是却并不够好。现在假设热水器由三部分组成:热水器、警报器、显示器,它们来自于不同厂商并进行了组装。那么,应该是热水器仅仅负责烧水,它不能发出警报也不能显示水温;在水烧开时由警报器发出警报、显示器显示提示和水温。这时候,上面的例子就应该变成这个样子: // 热水器public class Heater { private int temperature; // 烧水 private void BoilWater() { for (int i = 0; i <= 100; i++) { temperature = i; } 阅读全文
摘要:
引言委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在。本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。将方法作为方法的参数我们先不管这个标题如何的绕口,也不管委托究竟是个什么东西,来看下面这两个最简单的方法,它们不过是在屏幕上输出一句问 阅读全文
摘要:
C#实现程序的版本升级更新 收藏 我们做了程序,不免会有版本升级,这就需要程序有自动版本升级的功能。那么看看我是如何实现程序自动更新的。直接上代码:using System; using System.Collections.Generic; using System.Text; using System.Reflection; using System.IO; using System.Net; using System.Xml; namespace Update { /// <summary> /// 更新完成触发的事件 /// </summary> public 阅读全文
摘要:
using System.Runtime.InteropServices; #region API [DllImport("user32.dll")] static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo); [Flags] enum MouseEventFlag : uint { Move = 0x0001, LeftDown = 0x0002, LeftUp = 0x0004, RightDown = 0x0008, RightU 阅读全文
摘要:
using System.Data.OleDb; //命名空间 private void button1_Click(object sender, EventArgs e) { string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=student.xls; Extended Properties=Excel 8.0;"; OleDbConnection conn = new OleDbConnection(strConn) string sql = "select * from [stude 阅读全文
摘要:
跨线程调用窗体控件用户不喜欢反应慢的程序。在执行耗时较长的操作时,使用多线程是明智之举,它可以提高程序 UI 的响应速度,使得一切运行显得更为快速。在 Windows 中进行多线程编程曾经是 C++ 开发人员的专属特权,但是现在,可以使用所有兼容 Microsoft .NET 的语言来编写。不过Windows 窗体体系结构对线程使用制定了严格的规则。如果只是编写单线程应用程序,则没必要知道这些规则,这是因为单线程的代码不可能违反这些规则。然而,一旦采用多线程,就需要理解 Windows 窗体中最重要的一条线程规则:除了极少数的例外情况,否则都不要在它的创建线程以外的线程中使用控件的任何成员。本 阅读全文
摘要:
C#的Windows编程中多语言的实现作者:AspCool 属于c/c++分类 2010/9/9简介:这是C#的Windows编程中多语言的实现的详细页面,介绍了和c/c++,C#,#的,的W,Wi,in,nd,do,ow,ws,s编,编程,程中,中多,多语,语言,言的,的实有关的知识,加入收藏请按键盘ctrl+D,谢谢大家的观看!要查看更多有关信息,请点击此处 实现多语言的方法是通过配置文件实现,通过从配置文件中读取资源,然后在显示窗口的时候,即Load()方法中,动态显示相应的选择语言。 下面是在C#的Windows编程中实现多语言的步骤: 第一步:设置默认语言和修改默认语言 我们定义了一 阅读全文
摘要:
//cpu频率using Microsoft.Win32;private int GetCPUFrequency() { RegistryKey rk = Registry.LocalMachine.OpenSubKey(@"HARDWARE\DESCRIPTION\System\CentralProcessor\0"); object obj = rk.GetValue("~MHz"); int CPUFrequency = (int)obj; return CPUFrequency; }//////////////////////////////// 阅读全文
摘要:
//淡入 public int state = 0; private void f2_Load(object sender, EventArgs e) { this.Opacity = 0; } private void timer1_Tick(object sender, EventArgs e) { if (state == 0) { this.Opacity += 0.02; if (this.Opacity == 1) { state = 1; timer1.Enabled = false; } } else { this.Opacity = Opacity - 0.02; if (. 阅读全文
摘要:
using System;using System.Collections.Generic;using System.Text;using System.IO;using System.Xml;namespace AutoRunMgr{ public class XML { public static void CreateNode(string xmlpath,string node,string value) { if (!File.Exists(xmlpath)) { XmlDocument xmlDoc = new XmlDocument(); XmlElement root = xm 阅读全文
摘要:
using System;using System.Collections.Generic;using System.Drawing;using System.Windows.Forms;using System.Runtime.InteropServices;using System.IO;namespace ShowIcon{ [StructLayout( LayoutKind.Sequential)] public struct FileInfomation { public IntPtr hIcon; public int iIcon; public int dwAttributes; 阅读全文
摘要:
C#格式化数值结果表字符说明示例输出C货币string.Format("{0:C3}",2)$2.000D十进制string.Format("{0:D3}",2)002E科学计数法1.20E+0011.20E+001G常规string.Format("{0:G}",2)2N用分号隔开的数字string.Format("{0:N}",250000)250,000.00X十六进制string.Format("{0:X000}",12)Cstring.Format("{0:000.000}& 阅读全文
摘要:
C# 时间格式设置有时候我们要对时间进行转换,达到不同的显示效果 默认格式为:2005-6-6 14:33:34 如果要换成成200506,06-2005,2005-6-6或更多的该怎么办呢 我们要用到:DateTime.ToString的方法(String, IFormatProvider) using System; using System.Globalization; String format="D"; DateTime date=DataTime,Now; Response.Write(date.ToString(format, DateTimeFormatIn 阅读全文
摘要:
windows form (窗体) 之间传值小结在windows form之间传值,我总结了有四个方法:全局变量、属性、窗体构造函数和delegate。第一个全局变量:这个最简单,只要把变量描述成static就可以了,在form2中直接引用form1的变量,代码如下:在form1中定义一个static变量public static int i= 9 ;Form2中的钮扣按钮如下:private void button1_Click(object sender, System.EventArgs e){ textBox1.Text = Form1.i.ToString();}第二个方法是利用属性 阅读全文