Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 按下按钮时跳出代码 有没有办法让一个“听者”在代码中间听一个按钮的点击?在某些情况下,我不必等到代码完成后才能退出函数,但除了在函数调用中抛出大量的if检查之外,我似乎无法找到查看按钮是否被单击的方法,这对我来说似乎不是很有效_Vb.net_Winforms - Fatal编程技术网

Vb.net 按下按钮时跳出代码 有没有办法让一个“听者”在代码中间听一个按钮的点击?在某些情况下,我不必等到代码完成后才能退出函数,但除了在函数调用中抛出大量的if检查之外,我似乎无法找到查看按钮是否被单击的方法,这对我来说似乎不是很有效

Vb.net 按下按钮时跳出代码 有没有办法让一个“听者”在代码中间听一个按钮的点击?在某些情况下,我不必等到代码完成后才能退出函数,但除了在函数调用中抛出大量的if检查之外,我似乎无法找到查看按钮是否被单击的方法,这对我来说似乎不是很有效,vb.net,winforms,Vb.net,Winforms,此代码在线程上运行,与主应用程序不同 private function LongRunningFunction() Din canceled as boolean = false ' to make sure it is canceled while in the loop ' this is very long loop For i as integer = 0 to 100000 If _cancelExecution Then

此代码在线程上运行,与主应用程序不同

private function LongRunningFunction()
    Din canceled as boolean  = false ' to make sure it is canceled while in the loop
    ' this is very long loop
    For i as integer = 0 to 100000
        If _cancelExecution Then
            canceled = true
            Exit For
        End If
        ' your code runs here
        .........
    Next

    If canceled Then 

        ' Wrap up this thread, clean up stuff, etc 
    End If
    .......................
End Function
在主线程上,单击按钮时,取消执行设置为true


BackGroundWorker
已经内置了这种机制

使用a或a基本上这正是你必须做的(至少如果你想遵循良好的实践)。没有必要有大量的支票;在一个策略性选择的点进行一次检查,每秒评估几次就可以了
BackgroundWorker
和可取消的任务都需要“任务”配合,即运行检查并在被告知时让步。线程当然是“正确”的方式,但我经常通过粘贴应用程序来作弊。DoEvents()在长时间运行的代码中,允许GUI服务其他请求,如按钮点击,设置全局/表单级别范围变量,指示取消。这可能会带来各种各样的问题,因为用户可能会到处点击,搞乱正在进行的任何事情,甚至可能重新进入长时间运行的任务。但如果这是一个只有你使用的简单实用程序,我认为作弊是可以的。