c# 问题杂记

来源:互联网 发布:oa办公软件免费版 编辑:程序博客网 时间:2024/06/06 08:33

最近在使用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;

原创粉丝点击