创建一个简单的Windows服务程序的例子
1. VS新建 Windows 服务项目
2. 打开 Service1.cs 的设计视图窗口,右键菜单然后选择“添加安装程序”。就会显示 ProjectInstaller.cs
3. ProjectInstaller.cs 中有 serviceInstaller1 和 serviceProcessInstaller1
设置 serviceProcessInstaller1 属性
Account:LocalSystem
设置 serviceInstaller1 属性
DisplayName:Service1
ServiceName:Service1
StartType:automatic
Service1.cs 中的 Service1就是服务的名称,继承 ServiceBase 类。
ServiceBase类定义了一些可被其子类重载的函数,通过这些重载的函数,服务控制管理器就可以控制该Windows服务程序了。
这些函数包括:OnStart()、OnStop()、OnPause() 以及OnContinue()等四个。
OnStart() 服务启动时执行。
OnStop() 服务关闭时执行。
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.FileName = @"C:\abc.vbs";
process.Start();
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.FileName = @"C:\abc.bat";
process.Start();
process.StartInfo.FileName 可以是任何文件或可执行文件。
public class Setting
{
Hashtable hashtable = new Hashtable();
public Setting()
{
hashtable.Add("Name", "小强");
}
public string this[string key]
{
get
{
if (hashtable.ContainsKey(key))
{
return (string)hashtable[key];
}
return String.Empty;
}
}
}
protected void Page_Load(object sender, EventArgs e)
{
Setting setting = new Setting();
Response.Write(setting["Name"]);
}
C#中int和bool没有null值。
加一个问号就可以赋予null值
int? i = null; // 这就可以用了,不会出错。
if (i == null)
{
}
bool? b = null;
if (b == null)
{
}
private void Page_Load(object sender, System.EventArgs e)
{
InfoCity infoCity = new InfoCity();
M1(infoCity);
M2(infoCity);
Response.Write(infoCity.CityName);
}
private void M1(InfoCity info)
{
info.CityName = "M1";
}
private void M2(InfoCity info)
{
info = new InfoCity(); // 改变了地址
info.CityName = "M2";
}
把 GB2312 编码转成汉字
string s = Convert.ToString(47524, 2); // 转成二进制
byte byte1 = Convert.ToByte(s.Substring(0, 8), 2);
byte byte2 = Convert.ToByte(s.Substring(8), 2);
byte[] array = new byte[2] { byte1, byte2 };
MessageBox.Show(System.Text.Encoding.GetEncoding("GB2312").GetString(array));
汉字获取 GB2312 编码
byte[] array = System.Text.Encoding.GetEncoding("GB2312").GetBytes("工");
string s1 = Convert.ToString(array[0], 16);
string s2 = Convert.ToString(array[1], 16);
int i = Convert.ToInt32(s1 + s2, 16);
MessageBox.Show(i.ToString());
1.二进制
二进制转十进制
int i = Convert.ToInt32("10100100", 2);
二进制转十六进制
int i = Convert.ToInt32("10100100", 2);
string s = Convert.ToString(i, 16);
2.十进制
十进制转二进制
string s = Convert.ToString(164, 2);
十进制转十六进制
string s = Convert.ToString(164, 16);
3.十六进制
十六进制转二进制
string s = Convert.ToString(0xa4, 2);
十六进制转十进制
int i = Convert.ToInt32("A4", 16)
string s = Convert.ToString(0xa4, 10);
1.使用abstract关键字
2.实现抽象方法用override关键字。
public abstract class ThreadMan
{
protected bool sleep = false;
public void Suspend()
{
sleep = true;
}
public void Resume()
{
sleep = false;
}
public abstract void ThreadProc();
}
public class ThreadHH : ThreadMan
{
public override void ThreadProc()
{
while(true)
{
System.Windows.Forms.MessageBox.Show("Hello ThreadProc!");
Thread.Sleep(2000);
while (sleep)
{
Thread.Sleep(100);
}
}
}
}
要Post ViewState、EventValidation的值
string viewState = "/wEPDwUKMTk4MTYLDzI/WN9r0TKKWFH6vw==";
stringeventValidation = "/wEWGwLL1JTyAQK4oc2iCgK0jZI7vlS/";
viewState = System.Web.HttpUtility.UrlEncode(viewState);
eventValidation = System.Web.HttpUtility.UrlEncode(eventValidation);
string postData = "__VIEWSTATE=" + viewState + "&__EVENTVALIDATION=" + eventValidation;
关于分页,指定 EventTarget
postData += "&__EVENTTARGET="
每次新页面的ViewState、EventValidation的值都会变