如果仍按下切换按钮,则重新启动功能(C#,WPF)

如果仍按下切换按钮,则重新启动功能(C#,WPF),c#,wpf,C#,Wpf,我有一个函数,它启动一个自动热键脚本(完成后自动关闭),并等待它关闭 private void Disconnect() { Process process = new Process(); process.StartInfo.UseShellExecute = true; process.StartInfo.FileName = Directory.GetCurrentDirectory() + "/_Database/new.ahk"; process.StartInfo.W

我有一个函数,它启动一个自动热键脚本(完成后自动关闭),并等待它关闭

private void Disconnect()
{
  Process process = new Process();
  process.StartInfo.UseShellExecute = true;
  process.StartInfo.FileName = Directory.GetCurrentDirectory() + "/_Database/new.ahk";
  process.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
  process.StartInfo.Verb = "runas";
  process.Start();
  process.WaitForExit();
}
现在,当我的ToggleButton被打开时,我调用这个函数

private void btnAutoDisconnect_Checked(object sender, RoutedEventArgs e)
{
  Disconnect();      
}
现在,如果ToggleButton仍然处于打开状态,我想重新启动脚本。我已经试过了:

while(true)
{
 Disconnect(); 
}

即使我的未检查事件关闭了包含“自动热键”的每个进程,脚本还是会一次又一次地打开…

如果我正确理解了您的问题,您可以尝试检查是否仍选中了ToggleButton,并使用Dispatched.InvokeAsync()再次调用您的方法:


通过这种方式(使用InvokeAsync),您不会通过递归调用自己的函数来消耗堆栈空间,当ToggleButton被取消选中时,CallDisconnect()将停止调用自身。

我需要添加Task.Run for CallDisconnect()和Invoke for the if语句,但现在它可以工作了。否则我无法禁用切换按钮。谢谢:)
private void CallDisconnect()
{
    Disconnect();
    if (btnAutoDisconnect.Checked)
        Dispatcher.InvokeAsync(()=> CallDisconnect(), DispatcherPriority.Normal);
}

private void btnAutoDisconnect_Checked(object sender, RoutedEventArgs e)
{
    CallDisconnect();
}