Сообщество IT-специалистов
Ответы на любые вопросы об IT
Профессиональное развитие в IT
Удаленная работа для IT-специалистов
public class ClientCommunicator:TcpCommunicatorBase { public CustomSynchronizationContext SynchronizationContext { get; private set; } public ClientCommunicator(TcpClient client,Encoding enc) : base(client,enc) { SynchronizationContext=new CustomSynchronizationContext(); } protected override void MessageRecievedAsyncCallback(IAsyncResult ar) { SynchronizationContext.Post((s) => base.MessageRecievedAsyncCallback(ar), null); } public override void SendMessage(string text) { SynchronizationContext.Post((s) => { base.SendMessage(text); Debug.Print("From client"); }, null); } public override void BeginListenForMessage() { SynchronizationContext.Post((s) => base.BeginListenForMessage(), null); } public override void EndListenForMessage() { SynchronizationContext.Post((s) => base.EndListenForMessage(), null); } public override void Dispose() { Disconect(); SynchronizationContext.Dispose(); } public override void ConnectAsync(string adres, int port) { SynchronizationContext.Post((S) => { Timer connectTimer = new Timer(async (s) => { if (!_client.Connected) await _client.ConnectAsync(adres, port); if (_client.Connected) { OnConnectionCreated(); } }, null, 0, 5000); ConnectionCreated += (s, a) => { connectTimer?.Dispose(); }; }, null); } }
CustomSynchronizationContext брал отсюда https://habr.com/post/269985/