2

私は次の機能を持っています。この関数は、デバイスからの設定の読み取りを開始します。最初にパラメーターを設定して、プログラムがデバイスから読み取っていることを認識し、読み取られている設定を設定し、最後にデバイスにコマンドを送信します。

デバイスの応答を読み取る関数は、パラメーターがそのように設定されているため、読み取るパラメーターをチェックする必要があることを認識しています。しかし、私は 1 つの問題に直面しています: ブール値を変更し、非常に小さな関数を実行してコマンドを送信するだけなので、以下の関数は、デバイスが応答を送信する前に終了します。

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 は、私が自分で作成したクラスです。プログラムの現在の状態のグローバルパラメーターに関する情報を保持します。

4

1 に答える 1

1

たとえば、簡単にするためにタスク並列ライブラリを使用するなど、長時間実行されるメソッドを別のスレッドで開始します。バックグラウンドで多くの配管が行われます。次に、結果を待つか、アプリケーションで何か他のことを実行できるようにするかを決定できます (少なくとも正しく終了することはできます)。

TPL の「はじめに」の記事についてはこちらをご覧ください。より一般的な (そしてより低レベルの) スレッド化のチュートリアルについては、こちらをご覧ください。

于 2012-11-26T09:41:17.583 に答える