如果我设置了多个事件处理程序,如下所示:
_webservice.RetrieveDataCompleted += ProcessData1;
_webservice.RetrieveDataCompleted += ProcessData2;
Run Code Online (Sandbox Code Playgroud)
事件RetrieveDataCompleted被触发时处理程序的运行顺序是什么?它们是否在同一个线程中运行并按顺序运行?
我有以下代码,我处理一个事件两次.但是我总是希望确保mynewclass始终首先处理事件,然后触发本地事件处理程序代码.我理解MyClass事件应首先触发,因为它是首先创建的事件,但因为线程和入队正在发生,我认为它花了太长时间并且myhandleeventlocal在我想要它之前做了一些事情.我能等待它发生的任何方式吗?
public MyMainClass
{
private MyMethod()
{
MyClass mynewclass = new MyClass();
mynewclass.myObject += MyHandler(myhandleventlocal);
mynewclass.loadedevent += EventHandler(loadedevent)
}
private void myhandleventlocal()
{
//do stuff
}
private void loadedevent()
{
//do some stuff
}
}
public MyClass
{
public MyObject myObject;
public event loadedevent;
public MyClass()
{
myObject = new MyObject();
myObject += MyHandler(myhandlevent);
}
private void myhandlevent(long value, string detail)
{
//Start a thread
//Enqueue value and detail
//On seperate thread dequeue value and process …Run Code Online (Sandbox Code Playgroud) 我有这个简单的事件:
public class ClassA
{
public event Func<string, int> Ev;
public int Do(string l)
{
return Ev(l);
}
}
Run Code Online (Sandbox Code Playgroud)
和2方法:
static int Display(string k)
{
return k.Length;
}
static int Display_2(string k)
{
return k.Length*10;
}
Run Code Online (Sandbox Code Playgroud)
我正在注册这个活动:
ClassA a = new ClassA();
a.Ev += Display;
a.Ev += Display_2;
Run Code Online (Sandbox Code Playgroud)
现在,我正在执行:
Console.WriteLine(a.Do("aaa"));
Run Code Online (Sandbox Code Playgroud)
输出 :

什么 ???
他在调用列表中有2种方法!它确实运行了它们,但为什么它只显示上次注册的结果?
结果在哪里"3"消失了?(第一次调用)?(虽然两个display+都display_2被执行了......我没想到console.write会迭代结果.但也没想到他决定要显示哪个.)
