等待条件成立的最佳方法

时间:2018-07-25 05:48:34

标签: c# winforms

当变量来自plc时,我希望程序等待。我尝试了一段时间的算法,但应用程序坏了。代码如下。如何在c#中没有while循环的情况下做到这一点?

Network error : Software caused connection abort

1 个答案:

答案 0 :(得分:1)

一些建议:

  • 将click事件处理程序内部的实现移动到另一个方法/类(阅读有关SOLID原理的知识)
  • 使检查PLC的方法异步,这样您就不会阻塞主线程,也不会得到您要讲述的错误。

-

public class PlcChecker
{
   TcpClient client {get;set;}
   ModbusIpMaster master{get;set;}

   public PlcChecker()
   {
      client= new TcpClient();
    }

    public async Task Connect(string ip,int port)
    {
      ModbusIpMaster master = ModbusIpMaster.CreateIp(client);
      client.Connect(ip,port);
    }

     public async Task<bool> Check()
     {
       //your code to call master and while(true)
     }

}

 public class YourWinForm
{
    public PlcChecker plcChekcer { get; private set; }

    private async void toolStripButton2_Click(object sender, EventArgs e)
    {
        plcChekcer = new PlcChecker();
        await plcChekcer.Connect("192.168.0.1", 502);
        bool result = await plcChekcer.Check();
        if(result)
        {
             //do something   
        }

    }
}