我今天编程出现了一个问题。他说  文件“C:\check.txt”正由另一进程使用,因此该进程无法访问该文件,请大家指点指点,帮我修正下。  
模块一:  private  void  checkBox1_CheckedChanged(object  sender,  EventArgs  e)  
               {  
                       if  (checkBox1.Checked  ==  true)  
                       {  
                               StreamWriter  ws;  
                               ws  =  File.CreateText("C:\\check.txt");  
                               ws.WriteLine("1");  
                               ws.Close();  
                       }  
                       else  
                       {  
                               StreamWriter  ws;  
                               ws  =  File.CreateText("C:\\check.txt");  
                               ws.WriteLine("0");  
                               ws.Close();  
                       }  
 
 
               }        
模块2:  private  void  Form1_Load(object  sender,  EventArgs  e)  
               {  
                       if  (File.Exists(@"C:\check.txt")  ==  true)  
                     
                     {  
                               StreamReader  rs  =  new  System.IO.StreamReader(@"C:\check.txt",  System.Text.Encoding.UTF8);  
                               string  s  =  rs.ReadLine();  
                               if  (s.Trim()  ==  "0")  
                               {  
                                       textBox2.Text  =  "";  
                                       textBox3.Text  =  "";  
                               }  
                               else  
                               {  
                                       checkBox1.Checked  =  true;  
                               }  
             rs.close();  
         }  
}

解决方案 »

  1.   

    创建一个自定义CMutex进行同步
      

  2.   

    模块一:  Mutex m = new Mutex(false, "MyMutex");
    private  void  checkBox1_CheckedChanged(object  sender,  EventArgs  e)  
                   {  
                          m.WaitOne();
     if  (checkBox1.Checked  ==  true)  
                           {  
                                   StreamWriter  ws;  
                                   ws  =  File.CreateText("C:\\check.txt");  
                                   ws.WriteLine("1");  
                                   ws.Close();  
                           }  
                           else  
                           {  
                                   StreamWriter  ws;  
                                   ws  =  File.CreateText("C:\\check.txt");  
                                   ws.WriteLine("0");  
                                   ws.Close();  
                           }  
     m.ReleaseMutex(); 
                   }        
    模块2: Mutex m = new Mutex(false, "MyMutex");
     private  void  Form1_Load(object  sender,  EventArgs  e)  
                   {  
                   m.WaitOne();
            if  (File.Exists(@"C:\check.txt")  ==  true)  
                         
                         {  
                                   StreamReader  rs  =  new  System.IO.StreamReader(@"C:\check.txt",  System.Text.Encoding.UTF8);  
                                   string  s  =  rs.ReadLine();  
                                   if  (s.Trim()  ==  "0")  
                                   {  
                                           textBox2.Text  =  "";  
                                           textBox3.Text  =  "";  
                                   }  
                                   else  
                                   {  
                                           checkBox1.Checked  =  true;  
                                   }  
                 rs.close();  
             }  
    m.ReleaseMutex();}
      

  3.   

    问题在rs.Close之前又触发了CheckedChanged事件,在CheckedChanged事件中又会再次建立这个文件,所以会报错,下面是修改之后的代码
     private  void  Form1_Load(object  sender,  EventArgs  e)  
                   {  
                           if  (File.Exists(@"C:\check.txt")  ==  true)  
                         
                         {  
                                   StreamReader  rs  =  new  System.IO.StreamReader(@"C:\check.txt",  System.Text.Encoding.UTF8);  
                                   string  s  =  rs.ReadLine();  
                                   rs.close();  
                                   if  (s.Trim()  ==  "0")  
                                   {  
                                           textBox2.Text  =  "";  
                                           textBox3.Text  =  "";  
                                   }  
                                   else  
                                   {  
                                           checkBox1.Checked  =  true;  
                                   }           
             }  
    }
      

  4.   

    只要在操作文件的地方都加上mutex锁就没问题了。不过要小心死锁。