Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
 Проблема с потоком  [new]
jenya7
Member

Откуда:
Сообщений: 1140
По кнопке начало теста я запускаю поток
run = new Thread(new ThreadStart(TestRun));
if (!run.IsAlive)
{
     run.IsBackground = true;
     run.Start();
}

и в потоке я прогоняю список тестов
void TestRun()
{
    int idx = 0;
    string str;

    LogStart();
           
     foreach (Test test in test_list)
     { 

          this.Invoke((MethodInvoker)delegate
          {
                 listViewTests.Items[idx].UseItemStyleForSubItems = false;
                 listViewTests.Items[idx].SubItems[0].BackColor = Color.Yellow;
           });

            if (!string.IsNullOrEmpty(test.precondition))
                MessageBox.Show(test.precondition);

            //clear the buffer
            comport.ReadExisting();

            PreTestSet(test.opcode);

            SendCommand(test.opcode, test.param);
            str = "Opcode = " + test.opcode.ToString() + " Param = " + test.param.ToString();

            Invoke((MethodInvoker)delegate
            {
                  listViewTests.Items[idx].SubItems[2].Text = str;
            });

      
            if (GetResponse(5000, 1) == 1)   
            {
                if (response[0] != test.opcode)
                {
                    str += " Wrong response!";
                    this.Invoke((MethodInvoker)delegate
                    {
                        listViewTests.Items[idx].SubItems[2].Text = str;
                    });
                    test.result = FAIL;
                }

                if (!string.IsNullOrEmpty(test.postaction))
                {
                    if (test.dialog_type == DIALOG_OK)
                        MessageBox.Show(test.postaction);
                    else if (test.dialog_type == DIALOG_YES_NO)
                    {
                            DialogResult dialog_result = MessageBox.Show(test.postaction, "ATP", MessageBoxButtons.YesNo);

                            if (dialog_result == DialogResult.Yes)
                                test.result = PASS;
                            else if (dialog_result == DialogResult.No)
                                test.result = FAIL;
                    }
                }
                else
                {
                     test.result = ParseResponse(test.opcode, response[1]);
                }

                PostTestSet(test.opcode);

                PrintResult(test, idx);

                this.Invoke((MethodInvoker)delegate
                {
                     listViewTests.Items[idx].UseItemStyleForSubItems = false;
                     listViewTests.Items[idx].SubItems[0].BackColor = Color.White;
                });
            }
            else
            {
                PostTestSet(test.opcode)ж

                this.Invoke((MethodInvoker)delegate
                {
                      listViewTests.Items[idx].SubItems[2].Text = "No response form the device!";
                });
            }

            idx++;

            Application.DoEvents();
        }

        LogEnd();
        LogSave(log_report);
}

если я ставлю точку останова внутри TestRun, скажем на PrintResult(test, idx); - все пробегает хорошо и я вижу результат в listViewTests.
но если я не ставлю точку останова происходит черт знает что - первый результат высвечивается и потом он застревает где то в коде.

Как можно улучшить механизм?
2 июн 19, 13:16    [21899766]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с потоком  [new]
jenya7
Member

Откуда:
Сообщений: 1140
даже если я запускаю функцию без потока
private void buttonTestStart_Click(object sender, EventArgs e)
{
    TestRun();
}


то же самое. с отстановкой в коде все бежит красиво, без остановки - нет.
2 июн 19, 13:42    [21899778]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с потоком  [new]
fkthat
Member

Откуда:
Сообщений: 1143
Ты свой Xunit (Nunit) пишешь?
2 июн 19, 18:29    [21899882]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с потоком  [new]
jenya7
Member

Откуда:
Сообщений: 1140
fkthat
Ты свой Xunit (Nunit) пишешь?

а что Xunit тестирует железо? я реально подключаю девайс и прогоняю функциональный тест.
3 июн 19, 08:58    [21900099]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с потоком  [new]
pation
Member

Откуда: Москва
Сообщений: 4448
jenya7,

я так понимаю софтина зависает и не эрогирует ни на что?
3 июн 19, 18:55    [21900829]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с потоком  [new]
jenya7
Member

Откуда:
Сообщений: 1140
pation
jenya7,

я так понимаю софтина зависает и не эрогирует ни на что?

зависает, потом отмораживается на последнем тесте.
4 июн 19, 16:13    [21901667]     Ответить | Цитировать Сообщить модератору
Все форумы / WinForms, .Net Framework Ответить