首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BusyIndicator动画因延迟操作而停止

BusyIndicator动画因延迟操作而停止
EN

Stack Overflow用户
提问于 2020-11-17 14:25:09
回答 1查看 203关注 0票数 0

我试图显示一个从另一个源获取数据的繁忙指示器。

工作流程

进程starting

  • Fetching数据启动
  1. 繁忙指示器。
  2. 停止繁忙指示符。

样本代码

Xaml

代码语言:javascript
复制
 <busyIndicator:BusyIndicator x:Name="BusyIndicator" IsBusy="False" >
        <Grid>
            <Button x:Name="showindicator" Height="100" Width="200" Content="ShowIndicator" Grid.Row="1" Click="Showindicator_Click"/>
        </Grid>
    </busyIndicator:BusyIndicator>

C#

代码语言:javascript
复制
private async void Showindicator_Click(object sender, RoutedEventArgs e)
        {
            BusyIndicator.IsBusy = true;
            await Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
            {
                // In my original code, fetching data here
                for (int i = 0; i < 5; i++)
                {
                    Console.WriteLine(i);
                    Thread.Sleep(1000);
                }
            }));
            BusyIndicator.IsBusy = false;
        }

当dispatcher循环正在进行时,繁忙指示符不会启动,该指示符只在循环之后才开始。在上述情况下,指示符不显示,但如果IsBusy标志未设置为假指示符,则在循环结束后启动。

我不知道我做错了什么还是逻辑不正确?请帮我解决这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-17 14:33:55

您似乎要在GUI线程上执行繁重的操作--这是因为Dispatches.BeginInvoke将操作分派给GUI线程。

它可以更容易:

代码语言:javascript
复制
BusyIndicator.IsBusy = true;
await Task.Run(() =>
{
    // this is now running in the background

    // In my original code, fetching data here
    for (int i = 0; i < 5; i++)
    {
        Console.WriteLine(i);
        Thread.Sleep(1000); 

        Dispatcher.BeginInvoke(() => 
        {  
             // do UI stuff here
        });
    }
});

BusyIndicator.IsBusy = false;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64877138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档