Ожидание одного события для другого события

Итак... Пользователь должен нажать на кнопку, после того, как он щелкнет по ней, программа должна дождаться повторного нажатия на Panel и получить координаты этого нажатия. Но как только я нажимаю кнопку, все перестает отвечать на запросы. Я делаю что-то неправильно?

    private void Surbutton_Click(object sender, EventArgs e)
    {
        panel1.Cursor = Cursors.Cross;
        Cursor.Position = new Point(Left + panel1.Left + panel1.Width / 2, Top + panel1.Top + panel1.Height / 2);
        ziskavanie_pozicie = true;

        //Button ABCD = sender as Button;
        string ABCD = ((Button)sender).Name;

        switch (ABCD)
        {
            case "button_A":
                //cakaj.WaitOne();
                cakaj_manual.WaitOne();
                suradnica_Ax.Text = x.ToString();
                suradnica_Ay.Text = x.ToString();
                break;

            case "button_B":
                suradnica_Bx.Text = x.ToString();
                suradnica_By.Text = x.ToString();
                break;

            case "button_C":
                suradnica_Cx.Text = x.ToString();
                suradnica_Cy.Text = x.ToString();
                break;

            case "button_D":
                suradnica_Dx.Text = x.ToString();
                suradnica_Dy.Text = x.ToString();
                break;
        }
    }

    public void panel1_MouseClick(object sender, MouseEventArgs e)
    {
        MessageBox.Show("Hehe");
        if (ziskavanie_pozicie == true)
        {
            x = e.X;
            y = e.Y;
            //panel1.PointToClient(Cursor.Position);

            ziskavanie_pozicie = false;
            panel1.Cursor = Cursors.Default;
            //cakaj.Set();      
            cakaj_manual.Set();
        }
    }

2 ответа

Поэтому, когда пользователь нажимает кнопку, показанную курсором на изображении (или любую из кнопок со стрелкой), курсор перемещается в центр белой панели. В этот момент мне нужно, чтобы пользователь щелкнул где-то на панели и получил координаты этого клика. Когда у меня есть координаты, я назначаю их текстовым полям с левой стороны кнопок.

https://imgur.com/a/il1FI

Если вы просто хотите узнать, по какой причине ваши программы зависли, это потому, что вы по какой-то причине используете

ManualResetEvent или AutoResetEvent

которые не должны использоваться в основном потоке, поскольку это не та причина, по которой они созданы. Если вы скажете, например, manualResetEvent.WaitOne(); в главном потоке все замерзнет. Они просто созданы для синхронизации потоков, как Mutex, Semphores, TPL->Await так далее..

Другие вопросы по тегам