Это тревожный код:
private void CodesListSelectedIndexChanged(object sender, EventArgs e)
{
if (_doNothing) return;
_drawMarker = false;
_doNothing = true;
_entitiesList.SelectedItems[0].Selected = false;
_doNothing = false;
Game.CurrentItem = Item.GetItemByCodeId(_codesList.SelectedIndices[0]);
}
private bool _doNothing;
private void EntitiesListSelectedIndexChanged(object sender, EventArgs e)
{
if (_doNothing) return;
_drawMarker = false;
_doNothing = true;
_codesList.SelectedItems[0].Selected = false;
_doNothing = false;
Game.CurrentItem = Item.GetItemByEntityId(_entitiesList.SelectedIndices[0]);
}
В основном у меня есть два listViews, _codesList и _entitiesList, оба имеют один элемент. То, что я хочу, чтобы они сделали, - когда один выбран, другой должен отменить выделение. Чтобы предотвратить срабатывание события при изменении выбранного индекса из соответствующего другого списка на false, у меня есть переменная _doNothing, которая в начале имеет значение false.
Теперь, когда я выбираю первый элемент (скажем, в _entitiesList), происходит то, что он доходит до _codesList.SelectedItems [0] .Selected = false; затем он внезапно выпадает из функции, даже не вызывая событие для другого, и делает совершенно другие несвязанные вещи и никогда не возвращается к завершению этой функции. Я прошел через это снова и снова с отладкой, и она всегда одна и та же. Это означает, что _doNothing никогда не устанавливается в false снова, поэтому все последующие вызовы событий сразу завершаются неудачей, потому что ...
Wtf происходит?