C# wpf中Application.DoEvents()的替代方案

C# wpf中Application.DoEvents()的替代方案,c#,wpf,C#,Wpf,我有以下情况 kl.KeyDown += CheckPwd; while(flag) System.Windows.Forms.Application.DoEvents(); //continue other code based on "Success" //This will be called for every keydown void CheckPwd(object sender, KeyEventArgs e) { //some code here if(...

我有以下情况

kl.KeyDown += CheckPwd;
while(flag)
   System.Windows.Forms.Application.DoEvents();

//continue other code based on "Success"

//This will be called for every keydown
void CheckPwd(object sender, KeyEventArgs e)
{
   //some code here
   if(....)
   {
       flag = true;
       Success = true;   
       kl.KeyDown -= CheckPwd;   
   }
   else
   {
       flag = true;
       Success = false;
       kl.KeyDown -= CheckPwd;
   }
}
在这里,我希望避免使用Application.DoEvents。我尝试使用ManualResetEvent,但当我调用WaitOne时,它阻塞了当前线程,导致了这一情况,CheckPwd没有启动。如何实现这一点?

创建一个新的成功事件,在达到成功条件时触发它,然后将成功时需要执行的代码放入该事件的事件处理程序中:

定义事件:

public event Action Success;
void CheckPwd(object sender, KeyEventArgs e)
{
   //some code here
   if(...)
   {
       flag = true;
       Success = true;   
       kl.KeyDown -= CheckPwd;   
       if(Success != null) Success();
   }
   //...
附加处理程序:

kl.KeyDown += CheckPwd;
Success += DoSuccessStuff;
触发事件:

public event Action Success;
void CheckPwd(object sender, KeyEventArgs e)
{
   //some code here
   if(...)
   {
       flag = true;
       Success = true;   
       kl.KeyDown -= CheckPwd;   
       if(Success != null) Success();
   }
   //...

似乎是一个问题。告诉我们您试图实现的目标。@SriramSakthivel这里我想避免Application.DoEvents,但得到的结果是相同的。您的成功代码应该在CheckPwd方法中,而不是在代码的前面部分,这样您就不必等待事件被触发。@Servy谢谢,但是我必须在不同的地方编写不同的工作成功代码,实际上我使用的是kl.KeyDown+=CheckPwd;来自不同的地方