C# 在不阻塞的情况下等待事件触发

C# 在不阻塞的情况下等待事件触发,c#,c#-4.0,C#,C# 4.0,编辑:不,这个问题在上面链接的帖子中没有得到回答 如果我有这个伪代码: // do some stuff first wait until ClassName.EventName fires without blocking // do the rest of the code 在C和.NET4.0中是否有这样做的方法 编辑: 我已经下载了异步目标包,我正试图用它来实现这一点。 我的项目目标是.NET4.0 我现在添加了这样的代码 private static async void WaitA

编辑:不,这个问题在上面链接的帖子中没有得到回答

如果我有这个伪代码:

// do some stuff first
wait until ClassName.EventName fires without blocking
// do the rest of the code
在C和.NET4.0中是否有这样做的方法

编辑:

我已经下载了异步目标包,我正试图用它来实现这一点。 我的项目目标是.NET4.0

我现在添加了这样的代码

private static async void WaitAsyncNoBlock()
{
    await dynMapServLayer.IsInitialized;                 
}
所以就这样叫它

// do some stuff first
WaitAsyncNoBlock();
// do some more stuff

但我收到了错误信息,无法等待Bool。

如果您正在谈论在代码中像在中一样使用wait,您可以使用来自Microsoft的将该功能添加到您的.NET 4.0程序中。

如果您在代码中像在中一样使用wait,您可以使用来自Microsoft的将该功能添加到您的.NET 4.0程序中。

必须创建一个句柄来指定事件。当它触发时,您运行代码

例如:

MyForm.FormClosed += new FormClosedEventHandler(MyForm_FormClosed);
以及:


您必须创建一个句柄来指定事件。当它触发时,您运行代码

例如:

MyForm.FormClosed += new FormClosedEventHandler(MyForm_FormClosed);
以及:



订阅事件并在处理程序中执行其余操作。。。?我不太确定我是否得到了它,但是…你可以通过一个线程来完成。但对我来说这似乎很奇怪。。。该事件将在触发时自动捕获,那么您为什么要等待它?@Trustme-I'maDoctor我认为他需要.NET 4.0中的异步等待功能等待。没有阻塞-似乎是一种矛盾?@TimothyShields您在.NET4.5中使用了wait,它正是这样做的。它将阻止您的代码执行,但不会阻止消息泵,当您的任务完成时,它将从停止的位置开始。订阅事件并在处理程序中执行其余操作。。。?我不太确定我是否得到了它,但是…你可以通过一个线程来完成。但对我来说这似乎很奇怪。。。该事件将在触发时自动捕获,那么您为什么要等待它?@Trustme-I'maDoctor我认为他需要.NET 4.0中的异步等待功能等待。没有阻塞-似乎是一种矛盾?@TimothyShields您在.NET4.5中使用了wait,它正是这样做的。它将阻止您的代码执行,但不会阻止消息泵,当您的任务完成时,它将从停止的地方恢复。不能这样做。我特别不希望其余的代码在侦听器中运行。@Beebok您可以编辑您的原始帖子并添加更多详细信息来解释您要执行的操作吗。很难理解您想要什么。请参阅此处以理解为什么我不希望其余代码在订阅服务器中运行。[link]我只希望该方法中的其余代码在事件触发之前不运行。如果该代码不在侦听器中,它将按顺序运行。把你真正的密码放进去,不能那样做。我特别不希望其余的代码在侦听器中运行。@Beebok您可以编辑您的原始帖子并添加更多详细信息来解释您要执行的操作吗。很难理解您想要什么。请参阅此处以理解为什么我不希望其余代码在订阅服务器中运行。[link]我只希望该方法中的其余代码在事件触发之前不运行。如果该代码不在侦听器中,它将按顺序运行。把你真正的代码。我已经下载了VS 2012,所以我应该可以使用Wait。但我收到一个错误,说明找不到await的类型或命名空间。您是否从NuGet安装了异步目标包,您必须使用.net 4.5或下载异步目标包才能让await正常工作。如果您确实安装了它,但仍然收到错误,请检查。听起来你可能有问题4。它们描述了如何将代码放在一个单独的DLL中,而不是放在主网页代码中。我将尝试使用AsyncTargeting包。我的项目目标是.NET4.0,所以我认为这是唯一的出路。将AsyncTargeting包与VS 2012一起使用有什么害处吗,因为它们都具有相同的功能?Async不是vs2012的功能,而是.NET 4.5的功能。我已经下载了VS 2012,所以我应该可以使用Wait。但我收到一个错误,说明找不到await的类型或命名空间。您是否从NuGet安装了异步目标包,您必须使用.net 4.5或下载异步目标包才能让await正常工作。如果您确实安装了它,但仍然收到错误,请检查。听起来你可能有问题4。它们描述了如何将代码放在一个单独的DLL中,而不是放在主网页代码中。我将尝试使用AsyncTargeting包。我的项目目标是.NET4.0,所以我认为这是唯一的出路。将AsyncTargeting包与VS 2012一起使用有什么害处吗,因为它们都具有相同的功能?Async不是vs2012的功能,而是.NET 4.5的功能。