2014-10-02 2 views
0

Есть что-то, чего я пытался достичь, и я действительно застрял в нем. Я начну с самого начала: у меня есть проект с двумя формами: 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, похоже, не пытается мне помочь в этом. Спасибо за вашу помощь, очень благодарен.

ответ

Смежные вопросы