C# 线程化事件处理
重要的是让线程t从1打印到某个值,然后根据另一个线程s执行的信号ManualResetEvent暂停执行。完成s后,设置信号。因此,T恢复其执行C# 线程化事件处理,c#,multithreading,events,C#,Multithreading,Events,重要的是让线程t从1打印到某个值,然后根据另一个线程s执行的信号ManualResetEvent暂停执行。完成s后,设置信号。因此,T恢复其执行 class A { int key; int temp; public A(int x) { key = x; } public EventHandler eventHandler; private void onKeyReached(object sender, EventArg
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();
}
}
有人能解释这种现象吗?我只是在玩线程和其他东西
public int Temp
{
get { return temp; }
set
{
if (value == temp) return;
else if (temp == key)
onKeyReached(this, EventArgs.Empty);
//else
temp = value;
}
}
基本上去掉else,否则它的增量永远不会超过500我现在可以告诉你,针对A类的临时设置程序不是线程安全的为什么A.Temp=I不安全?我知道只有一个线程执行该行。
public int Temp
{
get { return temp; }
set
{
if (value == temp) return;
else if (temp == key)
onKeyReached(this, EventArgs.Empty);
//else
temp = value;
}
}