一个事件等待其他事件发生

时间:2018-03-30 11:20:05

标签: c# click mouseclick-event waitone

所以......用户必须点击按钮,点击它后,程序应该等待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 个答案:

答案 0 :(得分:0)

如果您只是想知道您的程序冻结的原因,那是因为您出于某种原因使用了

  

ManualResetEvent或AutoResetEvent

预计不会在主线程上使用,因为它不是他们创建的原因。 如果你在主线程上说例如manualResetEvent.WaitOne();,一切都会冻结。 它们只是用于同步线程,就像Mutex, Semphores, TPL->Await等。

答案 1 :(得分:0)

因此,当用户点击图像上的光标所示的按钮(或任何带箭头的按钮)时,光标将被移动到白色面板的中心。此时我需要用户单击面板上的某个位置并获取该单击的坐标。当我有坐标时,我将它们分配给按钮左侧的文本框。

https://imgur.com/a/il1FI