如何处理c#中3个线程访问同一个函数

本文关键字:线程 3个 访问 同一个 函数 何处理 处理 | 更新日期: 2023-09-27 18:06:09

我正在开发一个小型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();

如何处理c#中3个线程访问同一个函数

您可以简单地使用lock:

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