代码之家  ›  专栏  ›  技术社区  ›  Ben

阻止.Net中的线程

  •  3
  • Ben  · 技术社区  · 14 年前

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

    我该怎么做呢?

    3 回复  |  直到 14 年前
        1
  •  6
  •   AnthonyWJones    14 年前

    应该避免阻塞主UI线程,但要有极大的偏见。

    我会用 BusyIndicator 来自Silverlight的控制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>
    

    打电话之前 Load

    busyInd.IsBusy = true;
    

    接着 LoadComplete

    busyInd.IsBusy = false;
    

    这将在不阻塞主线程的情况下锁定用户在UI上的输入,并向用户提供一些关于为什么现在不能单击任何内容的反馈。您可以使用 BustContent 财产。当然,如果你不喜欢它的样子,你可以根据自己的喜好来设计。

    IsBusy 属性设置为VM属性,该属性指示VM现在不希望任何更改。

        2
  •  2
  •   mdm20    14 年前

    如果需要,可以使用ManualResetEvent类阻塞主线程。只要调用WaitOne方法阻塞,并在asycweb请求完成时调用Set方法取消阻塞。请注意,如果阻止主UI线程,整个应用程序将完全没有响应。

        3
  •  1
  •   Doug Ferguson    14 年前