最近在使用c#时,遇到些问题,记录下来以后查看
1.workthread没有消息传递机制,所有在workthread中不能new form等需要消息循环的窗口。
2.写程序时遇到:在创建窗口句柄之前,不能在控件上调用 Invoke或begininvoke,查看代码是,new 了一个form,然后调用一线程,在线程中通过form.invoke来调用form控件,应该是没问题的,因为已经new form了,感觉应该有窗口句柄了,但是却报了以上错误。经查资料以及网上搜索,发现:new form后,窗口句柄并没有生成,只是在内存中有个form对象,只有当窗口真正显示出来时,窗口句柄才生成。所以,当new form后,还需form.show()之后,才真正生成窗口句柄。
3.form窗口消息传递:wndproc(窗口处理函数)-》onclick(引发click事件)——》form_click()事件。其中wndproc和on***都可以重载。
4.常用delegate代码:
Thread thread1 = new Thread(new ThreadStart(delegate()
{
}));
controls.BeginInvoke(new MethodInvoker(delegate()
{
}));
5.调用delegate:
(1) public delegate void Method();
void f()
{
}
controls.BeginInvoke(new Method(f));
(2)public delegate void Method();
void f()
{
}
Method m1=new Method(f)/f;
controls.BeginInvoke(m1);
(3)
controls.BeginInvoke(new MethodInvoker(delegate()
{
}));
6.File.Create创建一个文件之后,然后用StreamReader来读取,说另一个进程正在使用该文件:Create方法调用后会返回一个打开的FileStream,关闭掉就可以了
if(!file1.Exists)
{
file1.Create().Close();
}或者
FileStream fs=File.Create(FilePath);
fs.Close();//这里没有关闭filestream;