C# 为什么赢了';t我的循环在windows窗体应用程序中继续
我制作了这个windows窗体应用程序,从串口获取一个值,并将其转换为字符串,显示在文本框中。或者至少应该是这样 似乎有什么东西阻止了我的代码循环,因此无法按预期工作 如果我将C# 为什么赢了';t我的循环在windows窗体应用程序中继续,c#,winforms,loops,C#,Winforms,Loops,我制作了这个windows窗体应用程序,从串口获取一个值,并将其转换为字符串,显示在文本框中。或者至少应该是这样 似乎有什么东西阻止了我的代码循环,因此无法按预期工作 如果我将myOrderDictionary.Add(55,33)值设置为ConverterDictionary中的int,我会打印相应的字符串一次,但随后它会停止。我改变了这个,因为我不想让它马上显示一些东西。相反,仅当myOrderedDictionary中的所有值相同时 我很确定displaydata\u事件中的if语句正在干
myOrderDictionary.Add(55,33)
值设置为ConverterDictionary
中的int,我会打印相应的字符串一次,但随后它会停止。我改变了这个,因为我不想让它马上显示一些东西。相反,仅当myOrderedDictionary
中的所有值相同时
我很确定displaydata\u事件中的if语句正在干扰我,因为我在将它们放入之前在循环中获得了in\u数据输出。但我不知道为什么它只通过这个方法一次,我能做些什么
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:表单
{
专用串行端口myport;
_数据中的私有字符串;
字符串符号{get;set;}
public bool statemnt=false;
公共表格1()
{
初始化组件();
}
公共类转换器字典
{
公共字典Dict{get;}
公共转换器字典()
{
Dict=新词典
{
{44,“嘿!”},
{53,“再见!”},
{57,“哇扎!”}
};
}
}
私有无效开始\u btn\u单击(对象发送者,事件参数e)
{
myport=新的SerialPort();
myport.BaudRate=9600;
myport.PortName=port\u name\u tb.Text;
myport.Parity=Parity.None;
myport.DataBits=8;
myport.StopBits=StopBits.One;
myport.DataReceived+=myport_DataReceived;
试一试{
myport.Open();
data_tb.Text=“”;
}
捕获(例外情况除外){
MessageBox.Show(例如Message,“Error”);
}
}
void myport_DataReceived(对象发送方,SerialDataReceivedEventArgs e)
{
OrderedDictionary myOrderedDictionary=新的OrderedDictionary(4);
新增(55,33);
添加(65,22);
添加(75,11);
var pos0=MyOrderDedDictionary[0];
var pos1=MyOrderDedDictionary[1];
var pos2=MyOrderDedDictionary[2];
int data1;
int数据2;
int数据3;
数据1=转换为32(pos0);
数据2=转换为32(位置1);
数据3=转换为32(位置2);
ICollection keyCollection=myOrderedDictionary.Keys;
ICollection valueCollection=myOrderedDictionary.Values;
in_data=myport.ReadLine();
调用(新的EventHandler(displaydata_事件));
对于(int i=1;i<20;i++)
{
插入(0,i,in_数据);
myOrderedDictionary.RemoveAt(3);
如果(i>=19)
{
i=1;
}
}
if(data1==data2&&data2==data3)
{
符号=new ConverterDictionary().Dict[data1];
statemnt=true;
}
}
私有void displaydata_事件(对象发送方,事件参数e)
{
数据\u tb.AppendText(“\n”+在\u数据中);
if(statemnt==true)
{
数据\u tb.AppendText(“\n”+在\u数据中);
dict_tb.Text=符号+“\n”;
statemnt=false;
}
其他的
{
数据\u tb.AppendText(“\n”+在\u数据中);
}
}
}
您的循环是无限的。。。一旦开始,它将永远不会完成或中断是的,我知道。让我重新表述代码中的某些内容,阻止它继续循环。因此,在数据停止之前,我会在数据tb中打印两次in_数据。据我所知,我的代码中没有包含任何可以做到这一点的内容。因此,我正在寻找一种方法来获得我想要的结果(如OP中所述)。@Fladderkatt您的for
循环会阻止它。@rdquot谢谢!你知道我怎样才能给按键加上名字,这样它们就不会互相干扰了吗?因为我不能添加与另一个键同名的键。@Fladderkatt我认为字典不是最好的选择。这里发生了很多事情,我不明白背后的“为什么”。