簡體   English   中英

c#如何在另一個void之后調用一個void?

[英]c# How can I call a void after another void?

我有兩個 void 必須每 5 秒一個接一個地調用。我的意思是第一個 void 必須被調用,然后第二個 void 必須被調用,我們有 5 秒的休息時間......但我的程序只有調用第一個 void(get pressure) 並忽略第二個....誰能給我看代碼?

private void getPressure()
{
    if (serialPort1.IsOpen)
    {
        string PCR = "";
        byte[] readCommand = { 0x50, 0x0D };
        serialPort1.Write(readCommand, 0, 2);
        int bytestoread = serialPort1.BytesToRead;
        if (bytestoread > 0)
        {
            byte[] input = new byte[bytestoread];
            serialPort1.Read(input, 0, bytestoread);
            PCR = System.Text.Encoding.UTF8.GetString(input);
        }
        if (PCR.StartsWith("P"))
        {
            if (PCR.Length > 15)
            {
                PCR = PCR.Substring(3, PCR.IndexOf("T") - 3).Trim();
                var decPCR = Decimal.Parse(PCR, NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint);
                rTxtBoxPressure.Text = decPCR + " Torr";
                double data;
                bool result = Double.TryParse(decPCR.ToString(), out data);
                if (result)
                {
                    serialDataChart.TriggeredUpdate(data);
                }
            }
        }
    }
}
    
private void getVoltage()
{
    if (serialPort1.IsOpen)
    {
        string UCR = "";
        byte[] readCommand2 = { 0x55, 0x0D };
        serialPort1.Write(readCommand2, 0, 2);
        int bytestoread2 = serialPort1.BytesToRead;
        if (bytestoread2 > 0)
        {
            byte[] input2 = new byte[bytestoread2];
            serialPort1.Read(input2, 0, bytestoread2);
            UCR = System.Text.Encoding.UTF8.GetString(input2);
        }
        if (UCR.StartsWith("V"))
        {
            if (UCR.Length > 15)
            {
                UCR = UCR.Substring(5, UCR.IndexOf("Volts") - 5).Trim();
                var decUCR = Decimal.Parse(UCR, NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint);
                rtxtBoxVoltage.Text = decUCR + " Volts";
                double data;
                bool result = Double.TryParse(decUCR.ToString(), out data);
                if (result)
                {
                    serialDataChart2.TriggeredUpdate(data);
                }
            }
        }
    }
}
    
private void InitTimer()
{
    timer1 = new Timer();
    timer1.Tick += new EventHandler(timer1_Tick);
    timer1.Interval =5000;
    timer1.Start();
}
            
    
private void timer1_Tick(object sender , EventArgs e)
{
    getPressure();
    getVoltage();
}

首先,您使用Interval = 5000定義您的時間,這將每 5 秒觸發一次計時器事件。

其次,在計時器事件處理程序中,您一個接一個地調用所需的方法,沒有任何間隔,因此一旦getPressure完成, getVoltage立即開始。

因此,總而言之-您不需要計時器,因為在您的要求中,我認為這兩個函數都不應定期調用。 我們唯一需要調用一個,然后在 2 秒后調用另一個,所以我會建議一些內容

getPressure();
// wait two seconds between calls, you could also use Thread.Sleep(2 * 1000)
await Task.Delay(2 * 1000);
getVoltage();

如果您想在調用getVoltage之前等待 2 秒,但從啟動getPressure開始應該是 2 秒,那么代碼應該如下所示:

var pressureTask = Task.Run(() => getPressure());
await Task.Delay(2 * 1000);
getVoltage();

await pressureTask;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM