Столкнулся с данной проблемой при передачи функции из одной формы в другую. Как её решить?
Login:
private MainClient OnConnect;
private MainClient OnDataReceived;
private MainClient OnServerDisconnect;
public Login(MainClient OnConnect, MainClient OnDataReceived, MainClient OnServerDisconnect)
{
InitializeComponent();
this.OnConnect = OnConnect;
this.OnDataReceived = OnDataReceived;
this.OnServerDisconnect = OnServerDisconnect;
}
private void buttonLogin_Click(object sender, EventArgs e)
{
...
MainClient._client = new Sock.Client { BufferSize = 1048576 };
MainClient._client.OnConnect += OnConnect; //Problem
MainClient._client.OnDataReceived += OnDataReceived; //Problem
MainClient._client.OnServerDisconnect += OnServerDisconnect; //Problem
...
}
Main:
...
public static Sock.Client _client = new Sock.Client();
public static ClientInfo _clientInfo = new ClientInfo();
...
private void runLoginScreen()
{
Application.Run(new Login(this, this, this));
}
Проблема Не удается неявно преобразовать тип "Project_Name.Main" в "Sock.Client.ServerDisconnectedEventHanlder".
Помечена в коде как "Problem"
К событиям Sock.Client.OnConnect
, Sock.Client.OnDataReceived
и Sock.Client.OnServerDisconnect
нужно подписывать методы с соответствующими сигнатурами, а не инстансы класса MainClient
.
Посмотрите, как описано событие Sock.Client.OnConnect
, какие у него параметры. Заведите в классе MainClient
метод (название - неважно, например, ConnectHandler
) с такими же параметрами. Тогда Вы сможете написать:
private MainClient mainClient;
public Login(MainClient aMainClient)
{
InitializeComponent();
this.mainClient = aMainClient;
}
private void buttonLogin_Click(object sender, EventArgs e)
{
...
MainClient._client = new Sock.Client { BufferSize = 1048576 };
MainClient._client.OnConnect += mainClient.ConnectHandler; //No problem
...
Аналогично - для OnDataReceived
и OnServerDisconnect
.
Только почему у Вас обработчики событий объекта, который принадлежит классу MainClient
, назначает Login
?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Перешел на новый риббонПрикрепляю картинки на элементы интерфейса, но они отображаются только в запущенном приложении
Можно ли как-то в c# запустить процесс в процессе без создания нового процесса?
Для рассылки почты использовал достаточно простой метод отправки
Есть приложение на Unity, которое отправляет POST запрос серверу