Бесконечная петля для поиска RSS - PullRequest
0 голосов
/ 09 марта 2019

Когда я пытался вычислить RSS, все выглядит нормально, я проверял отладку, и все было в порядке, после этого я опустил до значений для циклов for, но даже тогда программа не завершилась. Когда я начал программировать, WindowsForm не отвечает иЯ искал решения и нашел код об открытых новых темах. Но ничего не изменилось. В заключение программа тоже бесконечна. Спасибо за сотрудничество.

private async void button2_Click(object sender, EventArgs e)
{
    button1.Enabled = false;
    button2.Enabled = false;
    var count = 0;
    double RSS = 0;
    double RSS2 = 0;
    int W1 = 0;
    int W0 = 0;
    int xi = 0;
    int a = 0;

    await Task.Run(() =>
    {


        for (int w0 = 100000; w0 <= 150000; w0 = +10000)
        {
            UIupdate(w0);
            count = w0;
            for (int w1 = -10; w1 <= 10; w1++)
            {
                for (a = 0; a < 100; a++)
                {
                    RSS = Math.Tan(w1) * column1[a] + w0;


                    if (RSS2 == 0)
                    {
                        RSS2 = RSS;
                        W1 = w1;
                        W0 = w0;
                        xi = a;
                    }

                    if (RSS2 > RSS)
                    {

                        RSS2 = RSS;
                        W1 = w1;
                        W0 = w0;
                        xi = a;

                    }

                }
            }
        }


    }
    );

    button1.Enabled = true;
    button2.Enabled = false;
        label7.Text = RSS2.ToString();
        label8.Text = W0.ToString();
        label9.Text = W1.ToString();
        label10.Text = column1[xi].ToString();


}
private void UIupdate(int w0)
{
    var timenow = DateTime.Now;
    if ((DateTime.Now - dt).Milliseconds<=50)
    {


        synchronizationcontext.Post(new SendOrPostCallback(o => {

            label1.Text = "first intercept point: " + (int)o; 
        return;



        }),w0);
        dt = timenow;
    }
}

1 Ответ

0 голосов
/ 09 марта 2019

Сначала попробуйте добавить Application.DoEvents (); внутри вашего метода UIupdate. Это должно работать.

Предполагая, что вы вызываете метод, который обновляет пользовательский интерфейс даже внутри задачи, он вызовет этот метод для запуска в главном потоке ... Вот почему ваше приложение зависает.

Еще одно предложение - удалить ключевые слова async / await, а затем переместить оставшуюся часть кода в задачу, используя метод ContinuesWith из созданной задачи.

...