我有一个具有纯静态方法和属性的类。我在类“Load”上调用一个异步方法,它向 Web 服务请求一大块数据,然后触发一个事件来执行返回方法“LoadCompleted”。我不知道调用需要多长时间(调用“Load”方法与调用“LoadCompleted”方法之间的区别)。
我想阻止应用程序继续进行,直到引发回调方法(因为应用程序将尝试从此类中获取内容,直到“LoadComplete”方法设置数据后才会填充该类)。 我该怎么做呢?
最佳答案
应避免极端偏见地阻止主 UI 线程。
我会使用 Silverlight 工具包中的 BusyIndicator
控件:-
<UserControl x:Class="StackoverflowSpikes.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit">
<toolkit:BusyIndicator x:Name="busyInd" >
<Grid x:Name="LayoutRoot">
<!-- The rest of your content -->
</Grid>
</toolkit:BusyIndicator>
</UserControl>
在调用 Load
之前使用:-
busyInd.IsBusy = true;
然后在 LoadComplete
上使用:-
busyInd.IsBusy = false;
这将在不阻塞主线程的情况下锁定 UI 上的用户输入,并向用户提供一些反馈,说明为什么他们现在无法单击任何内容。您可以使用 BustContent
属性为忙碌消息提供您自己的内容。当然,如果您不喜欢它的外观,您可以根据自己的喜好设计它。
如果您想要获得所有 MVVM,您可以将 IsBusy
属性绑定(bind)到一个 VM 属性,该属性指示 VM 现在不想做任何更改。
关于c# - 在 .Net 中阻塞一个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3477479/