首页 > 其他 > 详细

更新UI测试

时间:2015-12-31 01:45:18      阅读:243      评论:0      收藏:0      [点我收藏+]
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;

namespace Multi_Thread
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        private bool _readStop = false;
        private bool _writeStop = false;
        private double _lineHaveRead = 0;

        private DispatcherTimer _readerTimer;
        private DispatcherTimer _writeTimer;

        private object _readObj = new object();
        private object _writeObj= new object();

        private Thread _readThread;
        private Thread _writeThread;
        public MainWindow()
        {
            InitializeComponent();
        }

#region Implement Methods

        private void WriteFile(object state)
        {
           
                using (
                var fsFileStream = new FileStream(@"E:\C#\WPF\Multi-Thread\Multi-Thread\test.log",
                    FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
                {
                    StreamWriter sw = null;
                    try
                    {                       
                        sw = new StreamWriter(fsFileStream);
                        
                        sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                        // await Task.Run(()=>sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")));
                    }
                    finally
                    {
                        if (sw != null)
                        {
                            sw.Flush();
                            sw.Close();
                           
                        }
                    }
                }
               // Thread.Sleep(200);
            
            //await Task.Delay(200);
        }

        private delegate void UpdateUI(string line);

        private bool reading = false;
        private void ReadFile(object status)
        {

            lock (_readObj)
            {
                UpdateUI uu = new UpdateUI(UpdateList);
                int linecount = 0;
                reading = true;
                using (
                    var fsFileStream = new FileStream(@"E:\C#\WPF\Multi-Thread\Multi-Thread\test.log",
                        FileMode.OpenOrCreate, FileAccess.Read, FileShare.ReadWrite))
                {
                    StreamReader sr = null;
                    try
                    {
                        sr = new StreamReader(fsFileStream);
                        string line;
                        while ((line = sr.ReadLine()) != null)
                        {
                            linecount++;
                            if (linecount > _lineHaveRead)
                            {
                                this.Dispatcher.BeginInvoke(DispatcherPriority.Background,uu, line);
                                // Dispatcher.BeginInvokeShutdown(DispatcherPriority.Background);
                            }

                        }
                        _lineHaveRead = linecount;
                    }
                    finally
                    {
                        if (sr != null)
                        {
                            //  sw.Flush();
                            sr.Close();

                        }
                       //  _readThread.Abort();
                        reading = false;
                    }
                }
            }
        }

        private void UpdateList(string line)
        {
            this.TextBlockMessage.Text = line;

            this.ListBoxShow.Items.Add(line);
           // ListBoxShow.SelectedItem = ListBoxShow.Items[ListBoxShow.Items.Count - 1];
            //ListBoxShow.ScrollIntoView(ListBoxShow.SelectedItem);
            this.TextBlockListBoxCount.Text = ListBoxShow.Items.Count.ToString();
            ListBoxShow.ScrollIntoView(ListBoxShow.Items[ListBoxShow.Items.Count - 1]);
        }

        private void ReadTick_Event(object sender, EventArgs e)
        {
            ReadFile(this);
            //lock (_readObj)
            //{
                //if(_readThread.ThreadState!=ThreadState.Running)
                //_readThread.Start();
              //  ThreadPool.QueueUserWorkItem(ReadFile);
           // }
            //if (reading == false)
            //{
              //  _readThread = new Thread(ReadFile);
              //  _readThread.Start();
            //}
            //ThreadPool.QueueUserWorkItem(ReadFile);
            //ReadFile(1);
        }

        private void WriteTick_Event(object sender, EventArgs e)
        {
            //lock (_writeObj)
            //{
                ThreadPool.QueueUserWorkItem(WriteFile);
            //}
            //ThreadPool.QueueUserWorkItem(ReadFile);
            //ReadFile(1);
        }
#endregion

#region Button Event
        private void BtnWrite_OnClick(object sender, RoutedEventArgs e)
        {
            //_writeStop = false;
            //ThreadPool.QueueUserWorkItem(WriteFile);
            //WriteFile();
            _writeTimer.Interval = new TimeSpan(0, 0, 0, 0, 10);
            _writeTimer.Tick += new EventHandler(WriteTick_Event);
            _writeTimer.Start();

            //while (true)
            //{
            //    WriteFile(this);
            //    Thread.Sleep(100);
            //}
        }

        private void BtnRead_OnClick(object sender, RoutedEventArgs e)
        {           
            _readerTimer.Interval = new TimeSpan(0, 0, 0, 0, 100);
            _readerTimer.Tick += new EventHandler(ReadTick_Event);
            _readerTimer.Start();           
        }

        private void BtnStopWrite_OnClick(object sender, RoutedEventArgs e)
        {
            if (_writeTimer != null)
            {
                _writeTimer.Stop();
            }
        }

        private void BtnStopRead_OnClick(object sender, RoutedEventArgs e)
        {
            if (_readerTimer != null)
            {
                _readerTimer.Stop();
            }
        }

        private void BtnClear_OnClick(object sender, RoutedEventArgs e)
        {
            ListBoxShow.Items.Clear();
        }
#endregion

        private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
        {
            _readThread = new Thread(ReadFile);
            _writeThread = new Thread(WriteFile);
            _readerTimer = new DispatcherTimer();
            _writeTimer = new DispatcherTimer();
        }
    }
}

 

<Window x:Class="Multi_Thread.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" Loaded="MainWindow_OnLoaded">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="30"/>
            <RowDefinition Height="30"/>
            <RowDefinition Height="30"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100"/>
            <ColumnDefinition Width="100"/>
            <ColumnDefinition Width="100"/>
            <ColumnDefinition Width="100"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Button Name="BtnWrite" Grid.Row="0" Grid.Column="0" Content="WriteFile" Click="BtnWrite_OnClick"/>
        <Button Name="BtnRead" Grid.Row="0" Grid.Column="1" Content="ReadFile" Click="BtnRead_OnClick"/>
        <Button Name="BtnStopWrite" Grid.Row="0" Grid.Column="2" Content="StopWrite" Click="BtnStopWrite_OnClick"/>
        <Button Name="BtnStopRead" Grid.Row="0" Grid.Column="3" Content="StopRead" Click="BtnStopRead_OnClick"/>
        <Button Name="BtnClear" Grid.Row="0" Grid.Column="4" Content="Clear" Click="BtnClear_OnClick"/>
        
        <TextBlock Name="TextBlockMessage" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="4" VerticalAlignment="Center" TextWrapping="WrapWithOverflow">Messages Show Here</TextBlock>
        <TextBlock Name="TextBlockListBoxCount" Grid.Row="1" Grid.Column="4" VerticalAlignment="Center"></TextBlock>
        <ProgressBar Name="ProgressBarRead" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="5" IsIndeterminate="True"></ProgressBar>
        
        <ListBox Name="ListBoxShow" Grid.Column="0" Grid.Row="3" Grid.ColumnSpan="3"></ListBox>
        <ListBox Name="ListBoxStatus" Grid.Column="3" Grid.Row="3" Grid.ColumnSpan="2"></ListBox>
        
    </Grid>
</Window>

 

更新UI测试

原文:http://www.cnblogs.com/leakeyash/p/5090482.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!