阻止.Net中的线程

Ben*_*Ben 3 c# vb.net silverlight multithreading asynchronous

我有一个具有纯静态方法和属性的类.我在类"Load"上调用异步方法,该方法向Web服务请求一大块数据,然后触发执行返回方法"LoadCompleted"的事件.我不知道调用要花多长时间(调用"Load"方法,然后调用"LoadCompleted")之间的区别.

我想阻止应用程序继续进行,直到引发回调方法(因为应用程序将尝试从此类中获取内容,在"LoadComplete"方法设置数据之前不会填充该内容).我该怎么做呢?

Ant*_*nes 6

在极端偏见的情况下应该避免阻止主UI线程.

我会使用BusyIndicatorSilverlight Toolkit中的控件: -

<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>
Run Code Online (Sandbox Code Playgroud)

在致电Load使用之前: -

busyInd.IsBusy = true;
Run Code Online (Sandbox Code Playgroud)

然后LoadComplete使用: -

busyInd.IsBusy = false;
Run Code Online (Sandbox Code Playgroud)

这将锁定UI上的用户输入而不会阻塞主线程,并使用一些反馈来解释为什么他们现在无法点击任何内容.您可以使用该BustContent属性为忙碌消息提供自己的内容.当然,如果你不喜欢它的外观,你可以根据自己的喜好设计它.

如果要获取所有MVVM,可以将IsBusy属性绑定到VM属性,该属性指示VM现在不需要任何更改.