Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Синхронизация потоков / 3 сообщений из 3, страница 1 из 1
06.05.2014, 11:52
    #38634335
cherrex_Den
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация потоков
Здравствуйте.
Сильно не пинайте, только начал изучать эту тему!

Есть класс(не мой) Sensor.
У него есть событие SensorChangeValue.
Пишу свою "обертку" (класс MySensor) которую потом буду использовать в приложениях.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
public class MySensor
{
   public delegate void MySensorFiredHendler(object fired_value);
   public event MySensorFiredHendler MySensorFired;

   Sensor _sensor
   public MySensor ()
   {
       _sensor = new Sensor();
       _sensor.SensorChangeValue += _sensor_SensorChangeValue;
   }

   void _sensor_SensorChangeValue(Sensor sender, SensorChangeValueEventArgs args)
   {
       object FiredValue = args.Value;
       if (MySensorFired!= null)
                MySensorFired(FiredValue);     
   }
}



Дальше уже в обычном winforms делаю следующее:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
private void button1_Click(object sender, EventArgs e)
 {
            MySensor s = new MySensor();
            s.MySensorFired += s_MySensorFired;
 }

void s_MySensorFired(object fired_value)
{
   this.text = fired_value.ToString();
}



Все бы хорошо, но проблема в том что событие Sensor.SensorChangeValue выполняется в другом потоке.
И естественно я получаю:
"Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'Form1' не из того потока, в котором он был создан."

Помогает

Код: c#
1.
2.
3.
4.
5.
6.
7.
void s_MySensorFired(object fired_value)
{
   this.BeginInvoke((Action)(() =>
   {
       this.text = fired_value.ToString();
    }));
}



А можно ли как-нибудь сделать синхронизацию потоков классе в MySensor? Чтоб в конечных приложениях не использовать
Код: c#
1.
this.BeginInvoke((Action)(() => ...


Сразу, тупо
Код: c#
1.
this.text = fired_value.ToString();



Заранее благодарен.
...
Рейтинг: 0 / 0
06.05.2014, 11:58
    #38634347
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация потоков
cherrex_Den,
923566 номер семь
...
Рейтинг: 0 / 0
06.05.2014, 12:42
    #38634426
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация потоков
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Синхронизация потоков / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]