2010-05-27 60 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线程 - 这是在任何情况下都不是一个好主意,特别是如果您在等待用户点击某个东西!

只要做到“正确的方式”。