繁体   English   中英

带线程的事件处理

[英]Event Handling with Threading

大图是将Thread t1打印到某个值,然后根据另一个线程s执行期间的signal (ManualResetEvent)暂停执行。 完成s之后,它将sets the signal 因此, T恢复执行。

class A
{
    int key;
    int temp;
    public A(int x)
    {
        key = x;
    }
    public EventHandler eventHandler;
    private void onKeyReached(object sender, EventArgs e)
    {
        eventHandler(this, e);
    }
    public int Temp
    {
        get { return temp; }
        set
        {
            if (value == temp) return;
            else if (temp == key)
                onKeyReached(this, EventArgs.Empty);
            else
                temp = value;
        }
    }
}
class Test
{
    static A a = new A(500);

    //signal to pause or resume threads
    static ManualResetEvent signal = new ManualResetEvent(true);

    static void Main()
    {
        a.eventHandler += WorkOnKeyReached;

        Thread t = new Thread(F);
        t.Start();
    }
    static void F()
    {
        for (int i = 0; i < 1000; i++)
        {
            a.Temp = i;
            //when a.Temp == a.Key, a.OnkeyReached() is fired.
            signal.WaitOne();
            Console.WriteLine(a.Temp);
        }
    }
    static void WorkOnKeyReached(object sender, EventArgs e)
    {
        signal.Reset();
        Thread s = new Thread(() =>
        {
            Console.WriteLine("Doing something else...");
            Thread.Sleep(3000);
            Console.WriteLine("Done..");
            signal.Set();
        });
        s.Start();
    }
}

程序按预期方式工作,直到线程tWorkOnKeyReachedreset signal暂停t WorkOnKeyReached 然而,在完成WorkOnKeyReached之后,我set signal t set为继续。

输出:

1
2
..
500
Doing something else...
Done.
500
Doing something else...
Done.

谁能帮助解释这种现象? 我只是在玩线程和其他东西。

    public int Temp
{
    get { return temp; }
    set
    {
        if (value == temp) return;
        else if (temp == key)
            onKeyReached(this, EventArgs.Empty);
       //else
            temp = value;
    }
}

基本上取出else,否则永远不会超过500

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM