почему мой l oop не продолжает работу в windows приложении для форм - PullRequest
0 голосов
/ 19 марта 2020

Я сделал это windows приложение для форм, где я получаю значение из последовательного порта и транслирую его в строку, которая отображается в текстовом поле. Или предполагается по крайней мере.

Кажется, что-то мешает моему коду зацикливаться, и поэтому не работает должным образом.

Если я установлю значение myOrderedDictionary.Add (55, 33) в int из ConverterDictionary я печатаю соответствующую строку один раз, но потом она останавливается. Я изменил это, потому что я не хочу, чтобы это отображало что-то сразу. Вместо этого, только когда все значения из myOrderedDictionary одинаковы.

Я совершенно уверен, что оператор if в displaydata_event работает со мной, так как я получил вывод in_data на l oop перед тем, как положить их в. Но я не знаю, почему он проходит через метод только один раз, и что я могу с этим поделать?

public partial class Form1 : Form
{
    private SerialPort myport;
    private string in_data;
    string TheSign { get; set; }
    public bool statemnt = false;

    public Form1()
    {
        InitializeComponent();
    }

    public class ConverterDictionary
    {
        public Dictionary<int, string> Dict { get; }   
        public ConverterDictionary()
        {
            Dict = new Dictionary<int, string>
            {
            {44, "Hey!"},
            {53, "Bye!"},
            {57, "Wazza!"}
            };
        }
    }

    private void start_btn_Click(object sender, EventArgs e)
    {
        myport = new SerialPort();
        myport.BaudRate = 9600;
        myport.PortName = port_name_tb.Text;
        myport.Parity = Parity.None;
        myport.DataBits = 8;
        myport.StopBits = StopBits.One;
        myport.DataReceived += myport_DataReceived;
        try {
            myport.Open();
            data_tb.Text = "";
        }
        catch (Exception ex) {
            MessageBox.Show(ex.Message, "Error");
        }
    }

    void myport_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        OrderedDictionary myOrderedDictionary = new OrderedDictionary(4);
        myOrderedDictionary.Add(55, 33);
        myOrderedDictionary.Add(65, 22);
        myOrderedDictionary.Add(75, 11);

        var pos0 = myOrderedDictionary[0];
        var pos1 = myOrderedDictionary[1];
        var pos2 = myOrderedDictionary[2];

        int data1;
        int data2;
        int data3;

        data1 = Convert.ToInt32(pos0);
        data2 = Convert.ToInt32(pos1);
        data3 = Convert.ToInt32(pos2);

        ICollection keyCollection = myOrderedDictionary.Keys;
        ICollection valueCollection = myOrderedDictionary.Values;

        in_data = myport.ReadLine();
        this.Invoke(new EventHandler(displaydata_event));

        for (int i = 1; i < 20; i++)
        {
            myOrderedDictionary.Insert(0, i, in_data);
            myOrderedDictionary.RemoveAt(3);

            if (i >= 19)
            {
                i = 1;
            }
        }
        if (data1 == data2 && data2 == data3)
        {
            TheSign = new ConverterDictionary().Dict[data1];
            statemnt = true;
        }
    }
    private void displaydata_event(object sender, EventArgs e)
    {

        data_tb.AppendText("\n" + in_data);
        if (statemnt == true)
        {
            data_tb.AppendText("\n" + in_data);
            dict_tb.Text = TheSign + "\n";
            statemnt = false;
        }
        else
        {
            data_tb.AppendText("\n" + in_data);
        }
    }
}

1 Ответ

0 голосов
/ 20 марта 2020

Ваш l oop бесконечен ... как только он начнется, он никогда не завершится или break.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...