Прошу прощения за возможный ОФФтоп, есть знатоки C#?

Остальные вопросы по работе с операционной системой Windows

Re: Прошу прощения за возможный ОФФтоп, есть знатоки C#?

Сообщение selenur » 31 мар 2015, 14:57

Есть простой способ получить доступ к элементам формы из любого потока, вот таким способом:
Код: Выделить всёРазвернуть

//***** начало процедуры ******

     this.Invoke((MethodInvoker)delegate {
        //тут твой код
                   
                    });

//***** окончание процедуры ******




Но так делать конечно очень неправильно.......
Мой блог: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Аватара пользователя
selenur
Почётный участник
Почётный участник
 
Сообщения: 3553
Зарегистрирован: 21 авг 2013, 19:44
Откуда: Новый Уренгой
Репутация: 1250
Медальки:
Настоящее имя: Сергей

Re: Прошу прощения за возможный ОФФтоп, есть знатоки C#?

Сообщение Bmax77 » 31 мар 2015, 17:35

А можно попадробней, в какую процедуру это вставлять
и "тут твой код"
код чего, обработчика порта?
Bmax77
Мастер
 
Сообщения: 392
Зарегистрирован: 13 авг 2013, 11:05
Репутация: 39
Медальки:

Re: Прошу прощения за возможный ОФФтоп, есть знатоки C#?

Сообщение selenur » 31 мар 2015, 21:30

Bmax77 писал(а):А можно попадробней, в какую процедуру это вставлять
и "тут твой код"
код чего, обработчика порта?


Ну вот упрощенный пример:
Код: Выделить всёРазвернуть
private bool _connected;  //определение необходимости работы потока
private BackgroundWorker _theads; //сам поток

//событие кнопки запуска отдельного потока
private void btStart_Click(object sender, EventArgs e)
{
  _connected = true;
//Создаем поток, и подключаем к нему процедуру
_theads = new BackgroundWorker();
  _theads.DoWork += TheadsStart;
//Запустим поток
  _theads.RunWorkerAsync();
}

//событие остановки потока
private void btStop_Click(object sender, EventArgs e)
{
  _connected = false;
}


//отдельный поток
private void TheadsStart(object sender, DoWorkEventArgs e)
{
   while (_connected)
    {


this.Invoke((MethodInvoker)delegate {

//***** в этих пределах возможен доступ к элементам формы, хотя и нежелателен****
       label1.text = "текущее время:" + datetime;
   //********                 
                    });

   }
}
Мой блог: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Аватара пользователя
selenur
Почётный участник
Почётный участник
 
Сообщения: 3553
Зарегистрирован: 21 авг 2013, 19:44
Откуда: Новый Уренгой
Репутация: 1250
Медальки:
Настоящее имя: Сергей

Re: Прошу прощения за возможный ОФФтоп, есть знатоки C#?

Сообщение Bmax77 » 01 апр 2015, 13:08

В общем не знаю по чему но ни какие извращения к положительному результату не привели.
Тогда я принципиально изменил подход.
Нажатие кнопки лишь дает толчек к посылке первой команды в мк, а дальше по каждому приходу в порт Ready, вызывается Invoke, который посылает следующую команду и так до достижения конца буфера с командами.
Вот теперь вроде все заработало правильно, видно как отрабатываются даже самые мелкие шаги.
Bmax77
Мастер
 
Сообщения: 392
Зарегистрирован: 13 авг 2013, 11:05
Репутация: 39
Медальки:

Пред.

Вернуться в Прочие вопросы Windows

Кто сейчас на конференции

Зарегистрированные пользователи: Alex lamaka, antoxa-kylibin, Bing [Bot], evgenyjp, Google [Bot], iAnhel, iMaks-RS, jkwe45, john1987887, Kachik, Krestec86, Kuzma30, legi0ner, Malyarka74, niksooon, rlan, sergay, SVP, Taganrog, Yandex [bot], Юрий-67

Поделиться

Reputation System ©'