Как десериализовать в отдельном потоке ? - C#
Формулировка задачи:
Метод MessageReceiverFirst принимает сокет и потом в отдельном потоке десериализует объект который передает этот же клиент. Когда делаю все в главном потоке все работает, как только я выполняю все это в отдельном потоке нечего не выходит глобальная переменная для десериализации всегда null.
Подскажите что я упустил, не могу сообразить...
Метод ацептера:
Метод приема сообщения для десериализации
Метод десериализации:
private void SocketAccepter() { Thread th = new Thread(delegate () { Socket cl; Client cli; int Cur = 0; while (isServerRunning) { try { MyMSG += new Action<MessageLib.Message>(MyEvMeth); cl = listener.Accept(); isDone = true; //MSGEvent(); MessageReceiverFirst(cl); cli = new Client(cl, msg); if (MyEvent1 != null) { MyEvent1("\n\r" + "Client connected: ID:" + Cur.ToString() + "\n\r"); } if (MyEvent != null) { MyEvent(cli); } } catch (Exception e) { MyEvent1("Exeption: "+e.ToString()); } } }); th.IsBackground = true; th.Start(); }
private void MessageReceiverFirst(Socket r_client) { //Для каждого нового подключения, будет создан свой поток для приема пакетов Thread th = new Thread( (object msg) => { while (isDone) { //if (r_client.Connected) //{ // Сюда будем записывать принятые байты byte[] bytes = new byte[1024]; // Принимаем r_client.Receive(bytes); if (bytes.Length != 0) { msg = ((MessageLib.Message)Deserialize(bytes)); } isDone = false; //} } Thread e = Thread.CurrentThread; e.Abort(); }); th.IsBackground = true; th.Start(msg); }
public static object Deserialize(byte[] data) { using (var memoryStream = new MemoryStream(data)) return (new BinaryFormatter()).Deserialize(memoryStream); }
Решение задачи: «Как десериализовать в отдельном потоке ?»
textual
Листинг программы
private async Task MessageReceiverFirst(Socket r_client) => await Task.Run(()=> { if (isDone) { byte[] bytes = new byte[1024]; r_client.Receive(bytes); if (bytes.Length != 0) { this.msg = ((MessageLib.Message)Deserialize(bytes)); } isDone = false; } });
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д