如何处理3个线程访问C#中的相同函数

时间:2016-09-07 05:32:15

标签: c# multithreading

我正在开发一个小的excel应用程序,其中我有三个线程访问相同的功能。我希望当其他线程完成时,该函数必须由一个线程访问。有人可以帮助我。我试过下面的代码。

              if ((checkBox1.Checked == true) && (textBox2.Text != ""))
                {
                    Run_thread = new Thread(() => READ_MAPPING_FILE_PATHS(textBox2.Text, 5, 15));
                    Run_thread.Start();

                }
                if ((checkBox2.Checked == true) && (textBox5.Text != ""))
                {
                    Run_thread1 = new Thread(() => READ_MAPPING_FILE_PATHS(textBox5.Text, 7, 9));
                    Run_thread1.Start();
                    //READ_MAPPING_FILE_PATHS(textBox5.Text, 7, 9);
                    check++;
                }
                if ((checkBox3.Checked == true) && (textBox6.Text != ""))
                {
                   Run_thread2 = new Thread(() => READ_MAPPING_FILE_PATHStextBox6.Text, 5, 15);
                    Run_thread.Start(); 
                }

//由线程访问的函数定义。

    public void READ_MAPPING_FILE_PATHS(string path , int A429, int ACSB)
    {
        // do something
     }

我尝试使用AutoResetEvent事件属性来处理,但这会导致我的应用程序处于无响应模式。

AutoResetEvent myResetEvent = new AutoResetEvent(false);

  waitHandle.WaitOne();

 waitHandle.Set();

1 个答案:

答案 0 :(得分:0)

您只需使用lock

即可
static object _lock = new object();
public void READ_MAPPING_FILE_PATHS(string path , int A429, int ACSB)
{
   lock(_lock)
   {
      // do something
   }
}