簡體   English   中英

EventWaitHandle阻止整個表單

[英]EventWaitHandle blocking the entire form

我已經環顧了很長時間,但沒有任何解決方案。

我想要實現的是使用EventWaitHandle類來暫停一個線程。

因此,我在窗體上創建了兩個按鈕。 第一個應該發送一條消息,然后暫停,第二個應該取消暫停第一個按鈕的線程,然后第一個按鈕發送另一個消息。 像那樣:

using System;
using System.Windows.Forms;
using System.Threading;

namespace Application
{
    public partial class Form1 : Form
    {
        EventWaitHandle wh = new AutoResetEvent(false);

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Thread blocked!");
            wh.WaitOne();
            MessageBox.Show("Thread unblocked!");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            wh.Set();
        }
    }
}

但是,一旦線程被wh.WaitOne()阻塞,我就無法對整個表單執行任何操作,包括按下第二個按鈕或至少關閉它。

我做錯了什么? 因為我似乎找不到可以找到的示例與代碼之間的任何區別。

您只有1個線程。 UI線程。 阻止它時,將阻止整個UI。

您必須創建第二個線程。

嘗試這個:

private void button1_Click(object sender, EventArgs e)
{
    new Thread() {
        void run() {
            MessageBox.Show("Thread blocked!");
            wh.WaitOne();
            MessageBox.Show("Thread unblocked!");
        }
    }.start();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM