winforms 如何保持功能持续激活

izkcnapc  于 2022-11-17  发布在  其他
关注(0)|答案(2)|浏览(107)

我正在使用C# Windows Form建立与其他软件的界面。
1.我的软件有不同的输入和输出(布尔)称为DI1 DI2 DO1 DO2。
1.在我的C#应用程序上,我有一个允许同步的函数:

public void synchro() 
{
   if (switchbutton1.Checked)
      DI1 = true;
   else 
      DI1 = false;

   if (switchbutton1.Checked)
      DI2 = true;
   else 
      DI2 = false;

   if (D01 == true)
      led.Value = true; // turn on a led
   else 
      DI1 = false;

   if (D02 == true)
      led.Value = true; // turn on a led
   else 
      DI2 = false;
}

我刚开始用C#,我想知道我可以把我的函数放在哪里,以保持它的持续同步。除了计时器,因为它闪烁我的LED灯,即使他们被关闭。

fcy6dtqo

fcy6dtqo1#

如果你必须连续使用这个函数,那么如果你的计时器有你要求的时间间隔,那会更好。它会连续调用,你的函数每次都会调用。

2guxujil

2guxujil2#

您应该分离出访问复选框控件的代码,因为它具有线程关联性。我看不出有什么理由不将其放在事件处理程序中。
至于阅读D0#寄存器的部分,可以在无限循环中运行它,并在异步任务中执行它,在卸载表单时取消并等待。

Task _syncTask;
CancellationTokenSource _cancellationTokenSource = new CancellationTokenSource();

public void switchbutton1_CheckChanged(object sender, EventArgs e) 
{
    var flag = switchbutton1.Checked;
    DI1 = flag;
    DI2 = flag;
}

public void Form_Load(object sender, EventArgs e)
{
    _syncTask = Sync(_cancellationTokenSource.Token);
}

public async void Form_Unload(object sender, EventArgs e)
{
    _cancellationTokenSource.Cancel();
    await _syncTask;
}

async Task Sync(CancellationToken token)
{
    while (!token.IsCancellationRequested)
    {
        if (D01 == true)
            led.Value = true; // turn on a led
        else 
            DI1 = false;
        if (D02 == true)
            led.Value = true; // turn on a led
        else 
            DI2 = false;
        await Task.Delay(10, token);  //Refresh 100 times per second
    }
}

相关问题