Я сделал это 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);
}
}
}