Есть что-то, чего я пытался достичь, и я действительно застрял в нем. Я начну с самого начала: у меня есть проект с двумя формами: main и логин.Как изменить свойства формы, от статического метода в другом потоке?
Форма входа очень проста, она запрашивает только идентификатор пользователя и пароль. Когда форма загружается, она подключается к серверу, а когда пользователь вводит эти данные и нажимает логин, он отправляет запрос на вход на сервер. Это пример того, как загружаются обе формы. Первая форма будет называться по Program.cs
является Логин:
public static main Child;
private void login_Load(object sender, EventArgs e)
{
Child = new main(this);
}
И основная форма начинается так:
public static login Parent;
public main(login parent)
{
Parent = parent;
sck_connect(); // the connection stuff is in this form, the main form
InitializeComponent();
}
Что мне нужно будет войти в систему, чтобы иметь объект (ребенка) для доступа к основным и чтобы иметь объект (родительский) для доступа к логину. Google не сказал бы мне способ сделать это, поэтому мне пришлось использовать свое воображение. Если есть лучший способ достичь этого, я буду рад его услышать.
Как вы можете видеть, первое, что main
действительно вызывает sck_connect()
, этот метод запустит соединение сокета с сервером и сохранит его. Теперь все отлично.
Как только пользователь нажимает кнопку входа в систему, запрос на вход отправляется на сервер. Мы будем ждать его быстрый ответ:
IAsyncResult art = connection.BeginReceive(buffer, 0, bufferSize, SocketFlags.None, new AsyncCallback(receivedata_w), connection);
Как вы можете видеть, когда некоторые данные были получены, метод receivedata_w
называется.
private static void receivedata_w(IAsyncResult ar)
{
// here some wonderful-working code receiving data
// and storing login query result in -> String instruction
if (instruction == "LoginResultTrue") // login succeded. We hide the login
// and show the main form
{
Parent.Visible = false; // hide the login form
// this.visible = true;
}
if (instruction == "LoginResultFalse") // login error. We hide the main
// form and show the login form
{
Parent.Visible = true; // show the login form
// this.visible = false;
}
}
Если вы спрашиваете себя: почему вам нужно установить снова visible=true
для login
формы, если это уже видно? - Когда пользователь уже вошел в систему и в main
форме, не может быть больше попыток входа в систему (например, из-за потери связи и подключенную)
Таким образом, чтобы подвести итоги, вопрос: Как изменить свойства формы (или свойства любого элемента управления в этой форме) из статического метода, возможно, в другом потоке?
Я пробовал все, и все, что я пробую, бросает мне другую ошибку. Google, похоже, не пытается мне помочь в этом. Спасибо за вашу помощь, очень благодарен.