【问题标题】:How to make this function wait for other function to finish?如何使该功能等待其他功能完成?
【发布时间】:2012-11-26 17:41:17
【问题描述】:

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

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

我尝试通过在两者之间放置 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 只是我自己创建的一个类。它保留了有关程序当前状态的全局参数的一些信息。

【问题讨论】:

  • “我的整个应用程序崩溃”是什么意思?
  • 它完全停止响应。
  • 你拥有ProgramParameters 类吗?
  • @Michael 你自己是什么意思?我在我的程序中编写了整个课程,所以我想我拥有这个课程。我看到 IBM 还创建了一个同名的类。这不是同一类:)
  • 看来我们需要更多地了解ProgramParameters.CSerialCom.SC 来回答这个问题。如果SerialCom.SC 基于 SerialPort,则检查 DataReceived 事件。 msdn.microsoft.com/en-us/library/…

标签: c# timing


【解决方案1】:

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

查看 here 了解有关 TPL 的“入门”文章,或查看 here 了解更通用(更底层)的线程教程.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-03
    • 2020-08-14
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多