禁止事件从其代码中触发自身

Čen*_*ůva 3 .net c# winforms

SelectedIndexChange事件在这里引起了我的麻烦,因为我改变index了这个事件,我想避免它.

我仍然需要在手动更改索引时调用事件,而不是在代码中调用.因为当你在事件中改变索引时你可能会注意到它会再次触发它.

M.k*_*ary 5

使用布尔值指定您在事件内部.

private bool _isRunning = false;
private void SelectedIndexChange(...)
{
    if(_isRunning) return;
    _isRunning = true;

    // do your things

    _isRunning = false;
}
Run Code Online (Sandbox Code Playgroud)

编辑.正如Scott Chamberlain所指出的,如果事件中有可能发生错误,那么使用finallystatement来始终重置flag.

private bool _isRunning = false;
private void SelectedIndexChange(...)
{
    if(_isRunning) return;
    _isRunning = true;
    try
    {
        // do your things
    }
    finally
    { 
        _isRunning = false;
    }
}
Run Code Online (Sandbox Code Playgroud)