C# 需要在C中无限地执行一组行#

C# 需要在C中无限地执行一组行#,c#,serial-port,infinite-loop,C#,Serial Port,Infinite Loop,我的目标是无限地写入一个串行端口,直到按下一个特定的键(比如“回车”)。有了所有的搜索结果,就可以只在循环中运行命令集,而不传输控制。但我的问题有点不同。我以Load的形式向串行端口发出写操作。一旦命令发出,GPS就会输出一些我需要读取的数据。我使用serialPort_DataReceived事件阅读了这篇文章。所以,如果我运行一次程序,一切都会按计划进行。但是,如果我尝试在许多站点上放置提供的任何循环,例如while(true){}或if(;){}或使用consolekey,我无法将控制从这

我的目标是无限地写入一个串行端口,直到按下一个特定的键(比如“回车”)。有了所有的搜索结果,就可以只在循环中运行命令集,而不传输控制。但我的问题有点不同。我以Load的形式向串行端口发出写操作。一旦命令发出,GPS就会输出一些我需要读取的数据。我使用serialPort_DataReceived事件阅读了这篇文章。所以,如果我运行一次程序,一切都会按计划进行。但是,如果我尝试在许多站点上放置提供的任何循环,例如while(true){}或if(;){}或使用consolekey,我无法将控制从这个特定的循环转移到串行端口的数据接收事件,因此无法侦听串行端口上的传入数据

所以,我需要的是写入串口,监听传入的数据,运行我的算法来更新表单,然后返回到第一个循环;然后重新运行整个序列,直到按下一个键

任何帮助都将不胜感激


谢谢。

您需要使用线程来实现这些无限循环。启动一个线程来读取数据

然后,您可以在UI上处理数据(如果简单的话),也可以使用另一个线程来收集数据并进行处理


另一个例子:

您需要使用线程来实现这些无限循环。启动一个线程来读取数据

然后,您可以在UI上处理数据(如果简单的话),也可以使用另一个线程来收集数据并进行处理

另一个示例:

线程教程:

或者谷歌“线程教程c#”

好的,前面的问题:

线程教程:

或者谷歌“线程教程c#”

好的,前面的问题:


您可以简单地使用BackgroundWorker或Thread类。请记住,每个线程可能只直接调用它自己的WinForms控件的方法。如果要避免跨线程异常,需要使用“Invoke”方法。有关更多详细信息和示例,请访问:

样本:

BackgroundWorker bw = new BackgroundWorker();

bw.DoWork += (x,y)  
    => 
    {
        while (true)
        {
            if (checkCondition)
            {
                // do sth here -> for example refresh control or 
                this.Invoke(updateUI, new object[] { args }); // // now ‘schedule’ the update for when the Winform (i.e. this) is able to by calling
                break; // if the job is done and you want to terminate the thread
            }
            // maybe put some Sleep here Thread.Sleep(5);
        }
    };

bw.RunWorkerCompleted += (x, y) => // not mandatory!
    {
        // sth
    };

bw.RunWorkerAsync(); // start 

您可以简单地使用BackgroundWorker或Thread类。请记住,每个线程可能只直接调用它自己的WinForms控件的方法。如果要避免跨线程异常,需要使用“Invoke”方法。有关更多详细信息和示例,请访问:

样本:

BackgroundWorker bw = new BackgroundWorker();

bw.DoWork += (x,y)  
    => 
    {
        while (true)
        {
            if (checkCondition)
            {
                // do sth here -> for example refresh control or 
                this.Invoke(updateUI, new object[] { args }); // // now ‘schedule’ the update for when the Winform (i.e. this) is able to by calling
                break; // if the job is done and you want to terminate the thread
            }
            // maybe put some Sleep here Thread.Sleep(5);
        }
    };

bw.RunWorkerCompleted += (x, y) => // not mandatory!
    {
        // sth
    };

bw.RunWorkerAsync(); // start 

你能帮我怎么做吗。我仍在学习C#,但我并不是真的在学习如何去做……那里有一个指向MSDN网站的链接,提供了一个关于如何去做的非常简单的教程。我建议你建立这个,一旦你理解了它,就适应你自己的目的。你能帮我怎么做吗。我仍在学习C#,但我并不是真的在学习如何去做……那里有一个指向MSDN网站的链接,提供了一个关于如何去做的非常简单的教程。我建议你去建立它,一旦你理解了它,就去适应你自己的目的。