如果仍按下切换按钮,则重新启动功能(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();
}