C# 如何使此函数等待其他函数完成?

C# 如何使此函数等待其他函数完成?,c#,timing,C#,Timing,我有下面的函数。此功能开始从设备读取设置。首先我设置了一个参数,以便我的程序知道它正在从设备读取,然后我设置了正在读取的设置,最后我向设备发送了一个命令 读取设备响应的函数知道它应该检查要读取的参数,因为设置了要读取的参数。但我面临一个问题:因为我只更改布尔值并执行一个非常小的函数来发送命令,所以下面的函数在设备发送任何响应之前就完成了 我试图通过在函数之间放置while函数来解决这个问题。这解决了第一个块的问题,但如果我在其他块中尝试,我的整个应用程序都会崩溃。我的问题是如何使此函数暂停,直到

我有下面的函数。此功能开始从设备读取设置。首先我设置了一个参数,以便我的程序知道它正在从设备读取,然后我设置了正在读取的设置,最后我向设备发送了一个命令

读取设备响应的函数知道它应该检查要读取的参数,因为设置了要读取的参数。但我面临一个问题:因为我只更改布尔值并执行一个非常小的函数来发送命令,所以下面的函数在设备发送任何响应之前就完成了

我试图通过在函数之间放置while函数来解决这个问题。这解决了第一个块的问题,但如果我在其他块中尝试,我的整个应用程序都会崩溃。我的问题是如何使此函数暂停,直到参数
IsReadingSettingFromDevice
设置回false

    private void ReadSettings()
    {

        ProgramParameters.C.IsReadingSettingFromDevice = true;
        ProgramParameters.C.SettingToReadFromDevice = Data.CMD_type;
        SerialCom.SC.SendCommand(Data.CMD_type);
        Debug.WriteLine("DEBUG INFO: SendCommand: " + Data.CMD_type);

        while (ProgramParameters.C.IsReadingSettingFromDevice) ;

        ProgramParameters.C.IsReadingSettingFromDevice = true;
        ProgramParameters.C.SettingToReadFromDevice = Data.CMD_IPsettings;
        SerialCom.SC.SendCommand(Data.CMD_IPsettings);
        Debug.WriteLine("DEBUG INFO: SendCommand: " + Data.CMD_IPsettings);

        //while (ProgramParameters.C.IsReadingSettingFromDevice) ;

        ProgramParameters.C.IsReadingSettingFromDevice = true;
        ProgramParameters.C.SettingToReadFromDevice = Data.CMD_version;
        SerialCom.SC.SendCommand(Data.CMD_version);
        Debug.WriteLine("DEBUG INFO: SendCommand: " + Data.CMD_version);

        //while (ProgramParameters.C.IsReadingSettingFromDevice) ;

        ProgramParameters.C.IsReadingSettingFromDevice = true;
        ProgramParameters.C.SettingToReadFromDevice = Data.CMD_channels;
        SerialCom.SC.SendCommand(Data.CMD_channels);
        Debug.WriteLine("DEBUG INFO: SendCommand: " + Data.CMD_channels);
    }

编辑:ProgramParameters类只是我自己创建的一个类。它保存有关程序当前状态的全局参数的一些信息

在单独的线程中启动长时间运行的方法,例如,为了简单起见,使用任务并行库—它在后台为您提供了很多管道。然后,您可以决定是等待结果,还是在应用程序中执行其他操作(至少可以正确退出)


查看有关TPL的“入门”文章,或了解更一般(和更低级)的线程教程。

你所说的“我的整个应用程序崩溃”是什么意思?它完全停止响应。你拥有
ProgramParameters
类吗?@Michael你所说的“自己”是什么意思?我在我的程序中写了整个课程,所以我想我拥有这个课程。我看到IBM也创建了一个同名的类。这不是同一个类:)似乎我们需要了解更多关于
programmaparameters.C
SerialCom.SC
的信息才能回答这个问题。如果
SerialCom.SC
基于SerialPort,则检查DataReceived事件。