可能重复:
事件处理程序执行顺序
C#事件系统对于单线程程序是否具有确定性?这意味着,如果我按此顺序触发事件A,B和C,它们每次都会以相同的顺序处理吗?
我想编写一个严重依赖事件的游戏逻辑,并且事件的处理顺序与调用它们的顺序至关重要.那么我可以使用给定的事件系统,像Reactive Extensions这样的库是否满足这个要求,还是我必须实现自己的观察者系统?
在做了一些阅读后,我理解处理程序调用顺序与订阅顺序相同但不保证.
所以我要说:
public event MYDEl ev;
Run Code Online (Sandbox Code Playgroud)
和订阅者:
ev+=GetPaper;
ev+=Print;
ev+=EjectPaper;
Run Code Online (Sandbox Code Playgroud)
保留+确保执行列表顺序的最佳实践机制是什么?
问题很简单。
Page.PreLoad 的存在是否有技术原因,或者这只是方便您可以整齐地放置始终必须在 Load 代码之前执行的代码?
在 PreLoad 事件处理程序中添加代码与在 Load 事件处理程序顶部添加代码之间有区别吗?
使用 PreLoad 的典型场景是什么?
谢谢!
有没有办法指定处理已注册事件代表的顺序或优先级?例如,我有一个事件,我想在任何其他事件之前立即处理,但我希望允许其他对象注册该事件的监听器.如何实现这一目标?
让我们说proc1总是在proc 2之前运行.
class MessageProcessor
{
private DataClient Client;
public MessageProcesser(DataClient dc)
{
Client = dc;
Client.MessageReceived += ProcessMessage;
}
void proc1(MessageEventArgs e)
{
// Process Message
}
}
class DataClient
{
public event MessageReceievedHandler MessageReceived;
}
void main()
{
DataClient dc = new DataClient();
MessageProcessor syncProcessor = new MessageProcessor(dc); // This one is high priority and needs to process all sync immediately when they arrive before any data messages
MessageProcessor dataProcessor= new MessageProcessor(dc); // This one can process the …Run Code Online (Sandbox Code Playgroud) 调用特定事件的处理程序的顺序取决于该特定事件的实现。例如,使用多案例委托的默认后备存储,处理程序将按照它们注册的顺序被调用。但是类设计者/实现者可能使用add和remove关键字来为事件访问器提供不同的后备存储,因此调用顺序也会不同。
.NET 框架基础库本身是否存在事件文档准确描述其调用顺序的情况?无论是否存在,依赖于此类记录的命令是否被认为是可接受的做法(例如,对于我自己实施和记录的事件)?为什么或者为什么不?
我有事件,例如:
public event EventHandler<NewReadyMessageEventArgs> NewReadyMessage
Run Code Online (Sandbox Code Playgroud)
问题是我需要为它添加两个处理程序,我需要先执行一个(因为最后一个依赖于第一个).即我需要一定的处理程序执行顺序.
我知道实际上处理程序将逐个执行,所以我只需要按正确的顺序附加它们,但这将是非常错误的设计.
我想创建单独的处理程序并附加它.在这个处理程序中,我只想按正确的顺序执行我的两个处理程序.你怎么想,你会建议什么?
我目前在C#中有两个不同的事件处理程序,它们执行两个不同的功能.虽然我如何将两种方法结合在一起,所以只有一个按钮可以同时执行这两种操作?(考虑到必须首先执行button1_Click事件.)
private void button2_Click(object sender, EventArgs e)
{
var file = File.AppendText(@"c:\output2.txt");
foreach (string tmpLine in File.ReadAllLines(@"c:\output.txt"))
{
if (File.Exists(tmpLine))
{
file.WriteLine(tmpLine);
}
}
file.Close();
}
private void button1_Click(object sender, EventArgs e)
{
using (StreamWriter sw = File.AppendText(@"c:\output.txt"))
{
StreamReader sr = new StreamReader(@"c:\filename.txt");
string myString = "";
while (!sr.EndOfStream)
{
myString = sr.ReadLine();
int index = myString.LastIndexOf(":");
if (index > 0)
myString = myString.Substring(0, index);
sw.WriteLine(myString);
}
button2_Click(sender, e);
}
}
Run Code Online (Sandbox Code Playgroud) 背景:
我正在处理一个非常旧的应用程序,它很少并且非常间歇性地生成异常。
目前的做法:
通常我们程序员使用全局异常处理程序处理罕见的未知数,连接如下:
[STAThread]
[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlAppDomain)]
private static void Main()
{
Application.ThreadException += new ThreadExceptionEventHandler(UIThreadException);
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
AppDomain.CurrentDomain.UnhandledException +=
new UnhandledExceptionEventHandler(UnhandledException);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new OldAppWithLotsOfWierdExceptionsThatUsersAlwaysIgnore());
}
private static void UIThreadException(object sender, ThreadExceptionEventArgs t)
{
//-------------------------------
ReportToDevelopers("All the steps & variables you need to repro the problem are: " +
ShowMeStepsToReproduceAndDiagnoseProblem(t));
//-------------------------------
MessageToUser.Show("It’s not you, it’s us. This is our fault.\r\n Detailed information about this error has automatically been recorded and we have been notified.Yes, we do look at …Run Code Online (Sandbox Code Playgroud)