C# поток зависает при вызове метода слишком много раз - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть метод, который иногда зависает, если я вызываю его слишком много раз. Я не вижу значительного увеличения памяти или утечки памяти, когда это происходит. Но мой процессор застревает примерно на 13%, когда программа зависает.

Вот метод, который я вызываю:

        private void FormWord(Col[] v)
        {
            char c = (char)0;
            for (int i = 0; i < v.Length; i++)
            {
                switch (v[i])
                {
                    case Col.grn:
                        string g = n.vih[rand.Next(n.vih.Length)];
                        if (CHECK_CAPITAL.Checked)
                            g = ToCapital(g);
                        TB_OUT.AppendText(g,Color.LightGreen);
                        break;
                    case Col.pur:
                        TB_OUT.AppendText(n.vio[rand.Next(n.vio.Length)],Color.LightBlue);
                        break;
                    case Col.cya:
                        TB_OUT.AppendText(n.sya[rand.Next(n.sya.Length)],Color.LightCyan);
                        break;
                    case Col.yel:
                        string k = n.kel[rand.Next(n.kel.Length)];
                        c = k.Last();
                        TB_OUT.AppendText(k, Color.LightYellow);
                        break;
                    case Col.red:
                        string p;
                        if (c != (char)0)
                        {
                            do
                            {
                                p = n.pun[rand.Next(n.pun.Length)];
                            } while (!p.StartsWith(c.ToString()));
                            TB_OUT.AppendText(p, Color.Pink);
                            break;
                        }
                        else
                        {
                            TB_OUT.AppendText(n.pun[rand.Next(n.pun.Length)], Color.Pink);
                            break;
                        }

                    default:
                        break;
                }
            }
            TB_OUT.AppendText(Environment.NewLine);
        }

Зависание происходит только в случаях, включая Col.red I ' m пытается создать случайную подстроку с условием, когда в случае возникновения Col.yellow подстрока Col.red должна начинаться с того же символа, что и результат Col.yellow. Это все еще происходит, даже когда я отключил исключения ContextSwitchDeadlock. Есть предложения?

...