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;来自不同的地方