C#如何用另一个单击事件终止一个单击事件处理程序
我有一个点击事件处理程序,它指向一个形成ssh连接的按钮。我想用另一个“取消”按钮来终止这个函数 但是,在执行事件处理程序时,“取消”单击事件处理程序不会在第一个处理程序执行时运行。我想用“取消”处理程序覆盖第一个处理程序C#如何用另一个单击事件终止一个单击事件处理程序,c#,event-handling,C#,Event Handling,我有一个点击事件处理程序,它指向一个形成ssh连接的按钮。我想用另一个“取消”按钮来终止这个函数 但是,在执行事件处理程序时,“取消”单击事件处理程序不会在第一个处理程序执行时运行。我想用“取消”处理程序覆盖第一个处理程序 private void按钮\u sshconnection\u单击(对象发送方,事件参数e) {/*创建ssh连接的一些代码*/} 私有无效按钮\u取消\u单击(对象发送者,事件参数e) {/*终止按钮的一些代码\u sshconnection\u Click*/} 我尝
private void按钮\u sshconnection\u单击(对象发送方,事件参数e)
{/*创建ssh连接的一些代码*/}
私有无效按钮\u取消\u单击(对象发送者,事件参数e)
{/*终止按钮的一些代码\u sshconnection\u Click*/}
我尝试了类似上面代码的代码结构,但正如我所说的,第二个函数在第一个函数运行时不运行。如果结构不对,有人能告诉我怎么做这项工作吗
提前感谢,
Onur您可以尝试实现例程的异步版本,例如
private CancellationTokenSource m_Cancellation;
private async void button_sshconnection_Click(object sender, EventArgs e) {
// if method is executing, do nothing. Alternative: cancel and start again
if (m_Cancellation != null)
return;
try {
using (m_Cancellation = new CancellationTokenSource()) {
var token = m_Cancellation.Token;
await Task.Run(() => {
//TODO: implement your logic here, please, note that cancellation is cooperative
// that's why you should check token.IsCancellationRequested
}, token);
}
}
finally {
m_Cancellation = null;
}
}
private void button_cancel_Click(object sender, EventArgs e) {
// If we can cancel, do it
m_Cancellation?.Cancel();
}
您正在寻找
任务
(创建ssh连接)和取消令牌
(取消创建)?@DmitryBychenko我不确定我在寻找什么,我是VisualStudio和c#的新手。我现在正在尝试Task
和CancellationToken
。空检查的好主意。但是为什么只在最后一个块中置零呢?它不应该先处理然后为空吗?我猜当你将它设置为null时,GC会为你处理它,对吗?@vsarunov:使用这是try{…}的语法糖最后{m_Cancellation.dispose()}
将首先处理实例,然后外部最后
将null
分配给m_Cancellation
啊哈,是的。注意到。这是一个比我的更好的答案。好答案。小挑剔:您应该使用Task.Run,这样您就可以将取消令牌作为第二个参数传递。这可以更好地处理某些边缘情况。@John Wu:谢谢<代码>令牌
值得提取(并跟踪而不是取消令牌源
)