2010-05-27 63 views
1

在用戶單擊Silverlight中的某些按鈕之前可以停止當前線程嗎?例如。Silverlight:在等待用戶反饋時停止線程

var clicked = false; 
ShowDialog(EventOnClosed => clicked = true); 
while (!clicked) {}; 
return; 

P.S.我知道正確的方法。我只是好奇,是否有辦法停止並繼續Silverlight執行流程。

P.P.S.只是爲了更具體。想象一下,使用javascript alert()用於消息的項目。如何用Silverlight消息框替換「返回Invoke(」alert('')「)」?你是否改變了所有500個地方使用正確的異步技術?

+1

+1,因爲我不明白downvote。然而,這個問題令人困惑,它不確定它是否問「我怎麼能......」或「可以......」,或者只是「出於純粹的好奇心,是否有可能阻止UI線程?」。你想澄清你是什麼__really__問? – AnthonyWJones 2010-05-27 13:13:09

+0

好的,我真的不知道。這個問題出於好奇。但後來我嘗試了代碼並掛起。所以它實際上是1)是否有可能,或者至少2)SL線程如何工作來考慮任務。 – queen3 2010-05-27 13:40:45

回答

3

不,它不是,即使你這樣做,你肯定也不會像這樣捆綁CPU。

在Silverlight中,您確實需要習慣以異步方式進行編程。

void SomeContainingFunc(Action callBack) 
{ 
    ShowDialog(EventOnClosed => callBack())) 
} 

無論調用,並希望代碼繼續異步操作完成後 -

void SomeCaller() 
{ 
    // ... do some intial stuff here 
    Action callBack =() => 
    { 
    //.. code to happen after async call completed 
    } 
    SomeContainingFunc(callBack); 
} 
1

你所試圖做的是停止(或更具體地說暫停)在UI線程 - 這是在任何情況下都不是一個好主意,特別是如果您在等待用戶點擊某個東西!

只要做到「正確的方式」。