C# 调用Monitor.Pulse()时抛出对象同步错误

C# 调用Monitor.Pulse()时抛出对象同步错误,c#,multithreading,synchronization,C#,Multithreading,Synchronization,我正在尝试在GUI系统中的两个线程之间进行同步 系统初始化两个同步对象并运行两个线程的主要任务: private FetcherAPI fetcherAPI { get; set; } private FileReader fileReader { get; set; } private object readerLocker; private object writerLocker; public Form1() { InitializeComponent(); this.f

我正在尝试在GUI系统中的两个线程之间进行同步

系统初始化两个同步对象并运行两个线程的主要任务:

private FetcherAPI fetcherAPI { get; set; }
private FileReader fileReader { get; set; }
private object readerLocker;
private object writerLocker;

public Form1() {
    InitializeComponent();
    this.fetcherAPI = new FetcherAPI();
    this.fileReader = new FileReader();

    readerLocker = new object();
    writerLocker = new object();

    new Thread(() => {
        this.fileReader.run(readerLocker);
    });

    new Thread(() => {
        this.fixerAPI.run(writerLocker, readerLocker);
    });
}

private void button1_Click(object sender, EventArgs e) {
    Monitor.Pulse(writerLocker);
}
读卡器线程:

public void run(object readerLocker) {
    while(true) {
        Monitor.Wait(readerLocker);
        readDataFromFileAndPresent();
    }
}
public void run(object writerLocker, object readerLocker) {
    while(true) {
        Monitor.Wait(writerLocker);
        fetchCurrency();
        Monitor.Pulse(readerLocker);
        Monitor.Wait(readerLocker);   
    }
}
写入线程:

public void run(object readerLocker) {
    while(true) {
        Monitor.Wait(readerLocker);
        readDataFromFileAndPresent();
    }
}
public void run(object writerLocker, object readerLocker) {
    while(true) {
        Monitor.Wait(writerLocker);
        fetchCurrency();
        Monitor.Pulse(readerLocker);
        Monitor.Wait(readerLocker);   
    }
}
当按下按钮时,我得到以下错误:

object synchronization method was called from an unsynchronized block of code

我做错了什么?

只有在您已经拥有锁的情况下才能调用
等待
脉冲
,也就是说,您在
语句中,或者您已成功使用
监视器。输入
以获取锁。这两件事你都没有做过,所以:事实上,这是行不通的。最简单的解决方法是添加一个
锁(writerLocker)

在我看来,脉冲和等待调用必须位于
语句中,或者甚至应该回答您的问题