Как исправить исключение? - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Объясню суть программы (Точнее ее части) - Рандомно генерируется ключ. Если такой ключ уже есть у какого либо символа из массива, то тогда ключ генерируется заново. Но так как моих знаний не хватило, чтобы всю эту генерацию сделать в виде цикла, то я все таки решил использовать goto. Сначала все нормально работает. Но в некоторых моментах происходит зацикливание (Полное), программа зависает. Но я не унываю! Решаю сделать это все в виде отдельно потока. Запускаю. Баунц. Исключение. Как его исправить? P.S: Да-да, goto - плохо. Вот, кстати, сам метод :
void _KeyGen()
        {
            Random _rnd = new Random();
            string _Char = _Learn_Learn_TB.Text;
            Start:;
            string _Key = null;
 
            for (int i = 0; i < 5; i++)
            {
                _Key += _RndChar[_rnd.Next(0, 36)];
            }
 
            if (_Data.ContainsValue(_Char) == false)
            {
                if (_Data.ContainsKey(_Key) == true)
                {
                    string _LogMsg = "The key "" + _Key + "" for char "" + _Char + "" busy";
                    _Learn_Log_LB.Items.Insert(0, _LogMsg);
                    goto Start;
                }
                else
                {
                    if (_Char.Length > 1)
                    {
                        string _LogMsg = "The char "" + _Char + "" is too long";
                        _Learn_Log_LB.Items.Insert(0, _LogMsg);
                        _Learn_Learn_TB.Text = "";
                        goto End;
                    }
                    else
                    {
                        _Data.Add(_Key, _Char);
                        string _LogMsg = "Added key "" + _Key + "" for "" + _Char + """;
                        _Learn_Log_LB.Items.Insert(0, _LogMsg);
                        _Learn_Learn_TB.Text = "";
                    }
                }
            }
            else
            {
                _Learn_Learn_TB.Text = "Error";
            }
            End:;
        }
================================== Кстати, буду благодарен, кто поможет или подскажет, как эту часть в виде цикла сделать :
 if (_Data.ContainsValue(_Char) == false)
            {
                if (_Data.ContainsKey(_Key) == true)
                {
                    string _LogMsg = "The key "" + _Key + "" for char "" + _Char + "" busy";
                    _Learn_Log_LB.Items.Insert(0, _LogMsg);
                    goto Start;
                }
                else
                {
                    if (_Char.Length > 1)
                    {
                        string _LogMsg = "The char "" + _Char + "" is too long";
                        _Learn_Log_LB.Items.Insert(0, _LogMsg);
                        _Learn_Learn_TB.Text = "";
                        goto End;
                    }
                    else
                    {
                        _Data.Add(_Key, _Char);
                        string _LogMsg = "Added key "" + _Key + "" for "" + _Char + """;
                        _Learn_Log_LB.Items.Insert(0, _LogMsg);
                        _Learn_Learn_TB.Text = "";
                    }
                }
            }
            else
            {
                _Learn_Learn_TB.Text = "Error";
            }
            End:;
============================== P.P.S: _Data - коллекция типа Dictionary. _RndChar - Массив, из элементов которого и строится ключ.

Решение задачи: «Как исправить исключение?»

textual
Листинг программы
if (_Learn_Log_LB.InvokeRequired)
                _Learn_Log_LB.Invoke(new Action(() => _Learn_Log_LB.Items.Insert(0, _LogMsg)));
            else _Learn_Log_LB.Items.Insert(0, _LogMsg);

Оцени полезность:

14   голосов , оценка 3.857 из 5
Похожие ответы