首页 > 解决方案 > 从第二次或更多次调用时如何重置增量变量

问题描述

public partial class MainForm : Form
{
    private static int lineReadCounter = 0;
    public string DataToSetandGet = String.Empty;

    private void StatusBtn_Click(object sender, EventArgs e)
    {
        string StatusInfoToshow = "?S\r";
        string commForMeter = string.Format(StatusInfoToshow);
        try
        {
            if (statusofMeter.serialPortForApp.IsOpen)
            {
                statusofMeter.serialPortForApp.Write(commForMeter);
            }
        }
        catch (Exception)
        {
            statusofMeter.ShowDataInScreenTxtb.Text = "TimeOUT Exception";
        }
    }

    public void SerialPortInApp_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        DataToSetandGet = serialPortForApp.ReadExisting();
        string pattern = @"^[a-zA-Z0-9\s\-?\*?\.?\/\:\\r]{1,}$";
        Match rgxs = Regex.Match(DataToSetandGet, pattern);

        if (rgxs.Success && DataToSetandGet.Length > 50 &&
        DataToSetandGet.IndexOf("\r") == DataToSetandGet.Length - 1)
        {
            lineReadCounter++;
            this.BeginInvoke((Action)delegate ()
            {
                Textbox1.AppendText(lineReadCounter.ToString() +
                DataToSetandGet.Substring(4).Replace("\n", " ").Replace("\r", "\r\n"));
            });
        }
    }

    private void CountReadings()
    {
        //Count Readings
        string[] lines =
        Regex.Split(textbox1.Text.Trim(), "\r\n");//Trim avoid white spaces
        lineReadCounter = lines.Length;
        label1.Text = "No. Readings: " + lineReadCounter.ToString();

    }
}

如果我按下按钮StatusBtn_Click,它会发送一个命令并显示

lineReadCounter + 读数

lineReadCounter1在第一次按下按钮时开始。但第二次和下一次是lineReadCounter从 开始2

我如何重置lineReadCounterzero每次1按下按钮?

标签: c#variablescounter

解决方案


lineReadCounter = 0;

statusofMeter.serialPortForApp.Write(commForMeter);

所以您的 btnClick 事件将如下所示:

private void StatusBtn_Click(object sender, EventArgs e)
    {
        string StatusInfoToshow = "?S\r";
        string commForMeter = string.Format(StatusInfoToshow);
        try
        {
            if (statusofMeter.serialPortForApp.IsOpen)
            {
                lineReadCounter = 0;
                statusofMeter.serialPortForApp.Write(commForMeter);
            }
        }
        catch (Exception)
        {
            statusofMeter.ShowDataInScreenTxtb.Text = "TimeOUT Exception";
        }
    }

我认为你订阅了SerialPort.DataReceived事件,所以如果你调用Write()SerialPortInApp_DataReceived方法将被调用。我觉得对吗?


推荐阅读