Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么赢了';t我的循环在windows窗体应用程序中继续_C#_Winforms_Loops - Fatal编程技术网

C# 为什么赢了';t我的循环在windows窗体应用程序中继续

C# 为什么赢了';t我的循环在windows窗体应用程序中继续,c#,winforms,loops,C#,Winforms,Loops,我制作了这个windows窗体应用程序,从串口获取一个值,并将其转换为字符串,显示在文本框中。或者至少应该是这样 似乎有什么东西阻止了我的代码循环,因此无法按预期工作 如果我将myOrderDictionary.Add(55,33)值设置为ConverterDictionary中的int,我会打印相应的字符串一次,但随后它会停止。我改变了这个,因为我不想让它马上显示一些东西。相反,仅当myOrderedDictionary中的所有值相同时 我很确定displaydata\u事件中的if语句正在干

我制作了这个windows窗体应用程序,从串口获取一个值,并将其转换为字符串,显示在文本框中。或者至少应该是这样

似乎有什么东西阻止了我的代码循环,因此无法按预期工作

如果我将
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我认为
字典
不是最好的选择。这里发生了很多事情,我不明白背后的“为什么”。