c# - 为什么我的循环不能在 Windows 窗体应用程序中继续
问题描述
我已经制作了这个 Windows 窗体应用程序,我从串行端口获取一个值并将其转换为它显示在文本框中的字符串。或者至少应该如此。
似乎有什么东西阻止了我的代码循环,因此不能按预期工作。
如果我将myOrderedDictionary.Add (55, 33)
Value 设置为 int ,ConverterDictionary
我会打印一次相应的字符串,但它会停止。我改变了这个,因为我不希望它立即显示一些东西。相反,只有当所有来自的值myOrderedDictionary
都相同时。
我很确定 displaydata_event 中的 if 语句让我很困惑,因为我在放入循环之前得到了 in_data 输出。但我不知道为什么它只通过该方法一次,我能做什么关于它?
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);
}
}
}
解决方案
您的循环是无限的......一旦开始,它将永远不会完成或break
.
推荐阅读
- mysql - MySQL 无法在 XAMPP 上启动
- sql - 使用 smbinning 时出现“太多 SQL 变量”错误
- macos - 如何在 ElasticSearch 上使用最多 4GB 的内存?
- typescript - 可能有既可以返回字符串值又可以知道它们的枚举顺序的emun?
- angular - 在 asp.net 中构建角度部分的问题
- c - Why does my code terminate when I add a 7th character to my array?
- django - Django: production app on Heroku cant find templates with "path" urlpattern
- postgresql - 启动 pgpool 时,这个“验证失败”错误是什么?
- android - 错误:无法解决:com.android.support:appcompat-v7:28.0.0
- c# - Not receiving result it seems with "onActivityResult()"