zoukankan      html  css  js  c++  java
  • 在后台线程中,从文件一行行异步加载内容进RichTextBox

    XAML文件

    XAML文件Code
    <Grid>
        <!--一个RichTextBox读取文件中的内容-->
        <RichTextBox x:Name="LoadFileBox" Visibility="Collapsed"></RichTextBox>
        <TextBlock x:Name="CountBox" Text="" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="60"/>
        <TextBlock x:Name="TotalBox" HorizontalAlignment="Center" VerticalAlignment="Top" FontSize="30"/>
    </Grid>
    
    C#代码
    C#代码
            public MainWindow()
            {
                InitializeComponent();
                ComputeTotal();
                Task.Factory.StartNew(() =>
                {//开辟一个后台线程
                    LoadFileAsync();
                });
                
            }
            /// <summary>
            /// 计算总行数
            /// </summary>
            private void ComputeTotal()
            {
                int count = 0;
                using (var fs = new FileStream(@"D:\work\记事本项目WPF\1.txt", FileMode.Open))
                using (var reader = new StreamReader(fs))
                {
                    while (reader.Peek() > 0)
                    {
                        string line = reader.ReadLine();//异步读
                        if (line != null)
                        {
                            count++;
                        }
                    }
                    TotalBox.Text = "总数:" + count;
                }
            }
            /// <summary>
            /// 异步加载文件内容到RichTextBox
            /// </summary>
            async void LoadFileAsync()
            {
                int count = 0;
                using (var fs = new FileStream(@"D:\work\记事本项目WPF\1.txt", FileMode.Open))
                using (var reader = new StreamReader(fs))
                {
                    while (reader.Peek() > 0)
                    {
                        string line = await reader.ReadLineAsync();//异步读
                        if (line != null)
                        {
                            Dispatcher.Invoke(new Action(() =>
                            {
                                count++;
                                CountBox.Text = "当前解析到: " + count;
                                LoadFileBox.Document.Blocks.Add(new Paragraph(new Run(line)));
                            }));
                        }
                    }
                }
                Dispatcher.Invoke(() =>
                {
                    CountBox.Visibility = Visibility.Collapsed;
                    TotalBox.Visibility = Visibility.Collapsed;
                    LoadFileBox.Visibility = Visibility.Visible;
                });
            }
    
  • 相关阅读:
    CF633C Spy Syndrome 2 trie树
    luogu 3998 [SHOI2013]发微博 map
    阿里云ECS新增端口
    阿里云运行docker容器报错
    no matches for kind "ReplicaSet" in version "extensions/v1beta1"
    k8s中flannel:镜像下载不了
    k8s删除节点后再重新添加进去(踩坑)
    如何在IntelliJ Idea中同时启动不同端口
    SpringBoot整合Elastic-job(详细)
    K8S容器探针
  • 原文地址:https://www.cnblogs.com/luna2333/p/15563301.html
Copyright © 2011-2022 走看看