c# - 在 .Net 中阻塞一个线程

标签 c# vb.net multithreading silverlight asynchronous

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

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

最佳答案

应避免极端偏见地阻止主 UI 线程。

我会使用 Silverlight 工具包中的 BusyIndi​​cator 控件:-

<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/

相关文章:

vb.net - 如何在VB.NET/Visual Studio 2008中允许空格键和退格键?

.net - 如何从 vb.net 中的正则表达式匹配中获取字符串?

c# - 锁语句饱和

c# - 如何在 ASP MVC 中选中复选框时禁用 DropDownList

c# - 无效的对象名称 'dbo.CategoryIdArray'

c# - 使用 LINQ 解析 XML 数据

c# - 从几个重叠的 png 中创建一个 jpeg

c# - 范围以及如何使用 VB.Net 缩小范围

java - 为什么java允许run()抛出Unhandled Exception而限制Handled Exception?

java - 如何使用可重入锁实现三个线程的同步?