2012-11-26 113 views
2

我有以下功能。該功能開始從設備讀取設置。首先,我設置了一個參數,以便我的程序知道它正在從設備讀取數據,而不是設置正在讀取的設置,最後我會向設備發送命令。如何使該功能等待其他功能完成?

讀取設備響應的函數知道它應該檢查要讀取的參數,因爲要設置參數。但是我面臨一個問題:因爲我只更改布爾值並執行一個非常小的函數來發送命令,下面的函數在設備發送任何響應之前完成。

我試圖解決這個問題,把它放在函數之間。這解決了它的第一塊,但如果我嘗試與其他人,我的整個應用程序崩潰。我的問題是如何讓此功能暫停,直到參數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只是我自己創建的類。它保存有關程序當前狀態的全局參數的一些信息。

+0

「我的整個應用程序崩潰」是什麼意思? –

+0

它完全停止響應。 – 2pietjuh2

+1

你是否擁有'ProgramParameters'類? – Michael

回答

1

在單獨的線程中啓動長時間運行的方法,例如爲了簡單起見使用Task Parallel Library - 它在後臺爲您做了大量的管道工作。然後,您可以決定是否要等待結果或能夠在應用程序中執行其他操作(可能至少會正確退出)。

看看here對TPL一個「入門」的文章,或here一個更普遍的(更低層)線程教程。