Раньше пользовался подобной схемой и работало. Тут вдруг стал ругаться на Invoke
public class ClientHandler
{
//Поля
private Socket handler;
private Thread thread;
private int errorsCount;
public bool finished;
public delegate void RSAPublicKeyMessageHandler(RSAPublicKeyMessage message);
public event RSAPublicKeyMessageHandler RSAPublicKeyMessageReceived;
private ClientHandler(Socket socket)
{
handler = socket;
finished = false;
errorsCount = 0;
StartAsync();
}
public async void StartAsync()
{
await Task.Run(() => Start());
}
public void Start()
{
//..............
BaseMessage outputMessage = Do(inputMessage);
//..............
}
private BaseMessage Do(BaseMessage inputMessage)
{
try
{
if(inputMessage is RSAPublicKeyMessage rSAPublicKeyMessage)
{
//Вот этот Invoke не выполянется, потому что владелец объекта другой поток
RSAPublicKeyMessageReceived?.Invoke(rSAPublicKeyMessage);
return new ServiceMessage(false, "OK");
}
}
catch (Exception ex)
{
return new ServiceMessage(true, ex.Message);
}
}