2013-09-25 2 views
0

У меня следующая ситуацияАльтернатива Application.DoEvents() в МОФ

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. Как я могу это достичь?

+3

Появляется [проблема XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Расскажите, чего вы пытаетесь достичь. –

+0

http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx – cadrell0

+0

@SriramSakthivel здесь я хочу избежать Application.DoEvents(), но добиться того же результата. – Rajeev

ответ

0

Создать новый Success событие, огонь, когда вы попадаете условие успеха, а затем поставить код, который нужно выполнить на успех в качестве обработчика событий для этого события:

определяют событие:

public event Action Success; 

Присоединить обработчик:

kl.KeyDown += CheckPwd; 
Success += DoSuccessStuff; 

огня событие:

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

Спасибо за ваше решение, теперь мой код работает как предполагалось – Rajeev

Смежные вопросы