namespace CommPort
{
/// <summary>
/// Объявляем делегата
/// </summary>
public delegate void DataReceived(object sender, CommEvent e);
/// <summary>
/// Класс события
/// </summary>
public class CommEvent:EventArgs
{
....
}
/// <summary>
/// Первый класс, который посылает сообщение
/// </summary>
public class CommPort
{
public event DataReceived dReceived;
/// <summary>
/// Переменная события
/// </summary>
private CommEvent ce;
//объявляем событие
public event DataReceived dReceived;
/// <summary>
/// поток для прослушивания
/// </summary>
private Thread listenThread;
/// <summary>
/// запуск потока для прослушивания
/// </summary>
public void StartListenThread()
{
listenThread = new Thread(new ThreadStart(ListenForData));
listenThread.Start();
ListenThreadState=true;
}
/// <summary>
/// функция потока
/// </summary>
private void ListenForData()
{
//listen pour un octet
byte[] ReceptionBuffer=new byte[1];
UInt32 ReadBytes;
while (ListenThreadState)
{
if (Read(ReceptionBuffer,1,out ReadBytes)==true)
{
if (ReadBytes>0)
{
ce = new CommEvent(CommEventType.ByteReceived);
ce.SetArgums(ReceptionBuffer, (byte)(ReadBytes));
dReceived(this, ce);
}
}
}
}
}
//Второй класс, где ловим событие
/// <summary>
///
/// </summary>
public class ModBus
{
//переменная класса порта
private CommPort.CommPort cport;
public ModBus(string port)
{
//цепляем событие
cport.dReceived+= new CommPort.DataReceived(comm_Received);
}
//функция олавливания события
private void comm_Received (object sender, CommEvent ce)
{
commMessage = new byte[ce.GetLength()];
commMessage = ce.GetArgums();
}
}
многопоточность в .net
помогите, пожалуйста, разобраться с многопоточностью в .net.
моя прога на c# 2005 коннектится с помощью System.Net.Sockets.TcpClient к серверу и что-нибудь качает в отдельном потоке. проблема вот в чем: надо, чтобы по мере скачивания заполнялся, например, progressBar в форме (в основном потоке). задача вроде элементарная, но в синхронизацию потоков я абсолютно не вьезжаю...:(
Цитата:
Originally posted by kipelovets
здравствуйте.
помогите, пожалуйста, разобраться с многопоточностью в .net.
моя прога на c# 2005 коннектится с помощью System.Net.Sockets.TcpClient к серверу и что-нибудь качает в отдельном потоке. проблема вот в чем: надо, чтобы по мере скачивания заполнялся, например, progressBar в форме (в основном потоке). задача вроде элементарная, но в синхронизацию потоков я абсолютно не вьезжаю...:(
здравствуйте.
помогите, пожалуйста, разобраться с многопоточностью в .net.
моя прога на c# 2005 коннектится с помощью System.Net.Sockets.TcpClient к серверу и что-нибудь качает в отдельном потоке. проблема вот в чем: надо, чтобы по мере скачивания заполнялся, например, progressBar в форме (в основном потоке). задача вроде элементарная, но в синхронизацию потоков я абсолютно не вьезжаю...:(
можно использовать делегатов - из потока скачивания активировать события (по мере скачивания) и отлавливать эти события в основном потоке.
Цитата:
Originally posted by xelos
можно использовать делегатов - из потока скачивания активировать события (по мере скачивания) и отлавливать эти события в основном потоке.
можно использовать делегатов - из потока скачивания активировать события (по мере скачивания) и отлавливать эти события в основном потоке.
А поподробнее можно?
Цитата:
Originally posted by kipelovets
А поподробнее можно?
А поподробнее можно?
смотри, в программе есть последовательный порт, который прослушивается в отдельном потоке. При получении чего-либо, активирует событие.
Код:
механизм следующий:
объявляем глобального делегата
в классе, который отправляет событие, объявляем событие
в том же классе, вызываем делегата, когда надо и с параметрами, что надо
во втором классе, в переменной первого класса цепляем событие к конкретной функции (сигнатура метода должна быть идентичной сигнатуре делегата)
второй класс успешно ловит события, отправляемые первым.
Насколько я знаю для .Net написаны прекрасные классы для работы с потоками - backgroundworker к примеру... достаточно, просто правильно написать его обработку и все будет замечательно не придется писать столько лишнего кода... На мой взгляд то оптимальное решение....
Цитата: MaSTeR_Alexandr
Насколько я знаю для .Net...
Некрофилия, знаете ли тут не поощряется.