Приложение Windows Form (c #): использование ввода из формы y в форме x (проблема многопоточности) - PullRequest
2 голосов
/ 28 ноября 2010

Я делаю игровое приложение UNO.Для этого в Form Game Table, если пользователь разыгрывает карту Wild, он должен выбрать цвет (желтый / зеленый / синий / красный).Поэтому я открываю другую форму (форма 5), когда используется символ подстановки, и использую событие щелчка Picturebox.

Проблема - как только форма 5 выполняется, она возвращается обратно в форму 4, не ожидая ввода от пользователя.Как заставить form5 ждать, пока не будет нажата одна из 4 картинных рамок.

Мое решение -

Установите флаг в 0 и используйте -

while (flag == 0) {}

внутри события pictureBox_click я изменяю флаг на 1.

, но проблема с решением заключается в том, что form4 не ждет завершения form5 и выполняет себя.Это вызывает проблему в алгоритме, так как в этом случае должен быть выбран цвет.

Пожалуйста, предложите что-нибудь, что я могу с этим сделать.

Спасибо, Радхика

Ответы [ 4 ]

3 голосов
/ 28 ноября 2010

Я думаю, вам следует вызвать form5.ShowDialog ().Таким образом, form4 будет ждать до закрытия from5.

2 голосов
/ 28 ноября 2010

Я думаю, что, как вы упомянули в заголовке Вопроса (проблема с потоками), вы вызываете form5 в новой теме.это неправильно, потому что в вашем случае нет необходимости запускать его в новом потоке.Вы должны заметить, что есть два способа показать форму.

1.для вызова Form.Show()

в этом случае новый поток инициализируется и управляет новыми событиями формы, вызывающий Form.Show() продолжит выполнять свою работу;

2.чтобы вызвать Form.ShowDialog()

, в этом случае поток вызывающей стороны (в вашей проблемной форме 4) будет ждать, и код будет блокироваться, пока вызываемая форма (в вашей проблемной форме 5) не завершит свою работу, также вы можете использовать DialogeResult в качестве типа возврата Form.ShowDialog().

0 голосов
/ 28 ноября 2010

создать делегата события в Form5 ()

, который будет запущен в Form4 ()

подождите, я дам вам код ..

           Form5(){
             public delegate void Form5Activated(object sender, System.EventArgs e);
             public event Form5Activated activate;

        //some codes..
        //then 

        if(activate != null){
             System.EventArgs ea = new System.EventArgs();
             activate(this, ea);
        }


    //in form4()

    Form5 x = new Form5();

    Form5 += Form5_activate(thia.activate);
    void activate(object sender, System.Eventargs ea){
     //all ur codes in action listener here

}


}
0 голосов
/ 28 ноября 2010

Если вы используете метод Form.Show, вместо этого используйте Form.ShowDialog. Этот метод ожидает ввода и нажатия введенного вами кода записи, чтобы выбрать и закрыть новое диалоговое окно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...