zoukankan      html  css  js  c++  java
  • Wpf Dispatcher.BeginInvoke((Action)delegate{}));

    <Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfApplication1"
            mc:Ignorable="d"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition/>
                <RowDefinition/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <Button Grid.Row="0" Grid.Column="0" Command="{Binding ClickCmd}" Content="Click Cmd"/>
            <Button Grid.Row="0" Grid.Column="1" Command="{Binding CancelCmd}" Content="Cancel Cmd"/>
            <ListBox Grid.Row="1" BorderBrush="Black" BorderThickness="3" Grid.RowSpan="2" ItemsSource="{Binding ContentOb,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
        </Grid>
    </Window>
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Input;
    
    namespace WpfApplication1.Model
    {
        public class DelegateCommand : ICommand
        {
            private readonly Predicate<object> _canExecute;
            private readonly Action<object> _execute;
    
            public event EventHandler CanExecuteChanged;
    
            public DelegateCommand(Action<object> execute)
                           : this(execute, null)
            {
            }
    
            public DelegateCommand(Action<object> execute,
                           Predicate<object> canExecute)
            {
                _execute = execute;
                _canExecute = canExecute;
            }
    
            public  bool CanExecute(object parameter)
            {
                if (_canExecute == null)
                {
                    return true;
                }
    
                return _canExecute(parameter);
            }
    
            public  void Execute(object parameter)
            {
                _execute(parameter);
            }
    
            public void RaiseCanExecuteChanged()
            {
                if (CanExecuteChanged != null)
                {
                    CanExecuteChanged(this, EventArgs.Empty);
                }
            }
        }
    }
     using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.ComponentModel;
    using WpfApplication1.Model;
    using System.Collections.ObjectModel;
    using System.Threading;
    using System.Windows; 
    using System.IO;
    using Newtonsoft.Json;
    
    namespace WpfApplication1.ViewModel
    {
        public class WpfVM : INotifyPropertyChanged
        {
            private WpfVM()
            {
    
            }
            public event PropertyChangedEventHandler PropertyChanged;
    
            public void OnPropertyChanged(string propName)
            {
                var handler = PropertyChanged;
                if(handler!=null)
                {
                    handler?.Invoke(this, new PropertyChangedEventArgs(propName));
                }
            }
    
            private static WpfVM Wpfvm;
            private static readonly object objLock = new object();
            public static WpfVM GetWpfVM()
            {
                lock(objLock)
                {
                    if(Wpfvm == null)
                    {
                        Wpfvm = new WpfVM();
                    }
                    return Wpfvm;
                }
            }
    
            private static CancellationTokenSource cts=new CancellationTokenSource();
    
            #region Commands
            private DelegateCommand ClickCmdValue;
            public DelegateCommand ClickCmd
            {
                get
                {
                    if(ClickCmdValue==null)
                    {
                        ClickCmdValue = new DelegateCommand(ClickCmdExecuted);
                    }
                    return ClickCmdValue;
                }
            }
    
            private string ContentValue;
            public string Content
            {
                get
                {
                    return ContentValue;
                }
                set
                {
                    if(value!=ContentValue)
                    {
                        ContentValue = value;
                        OnPropertyChanged("Content");
                    }
                }
            }
    
    
            private bool IsCancelledValue=false;
            public bool IsCancelled
            {
                get
                {
                    return IsCancelledValue;
                }
                set
                {
                    if(value!=IsCancelledValue)
                    {
                        IsCancelledValue = value;
                        OnPropertyChanged("IsCancelled");
                    }
                }
            }
            private void ClickCmdExecuted(object obj)
            {
                ContentOb = new ObservableCollection<string>();
                Task.Run(() =>
                {
                    while (!cts.IsCancellationRequested)
                    {
                        Content = DateTime.Now.ToString("yyyyMMddHHmmssffff");
                        App.Current.Dispatcher.BeginInvoke((Action)delegate
                        {
                            ContentOb.Add(Content);
                        });
                        System.Diagnostics.Debug.WriteLine(Content);
                    }
                },cts.Token);                      
            }
    
            private DelegateCommand CancelCmdValue;
            public DelegateCommand CancelCmd
            {
                get
                {
                    if(CancelCmdValue==null)
                    {
                        CancelCmdValue = new DelegateCommand(CancelCmdValueExecuted);
                    }
                    return CancelCmdValue;
                }
            }
    
            private void CancelCmdValueExecuted(object obj)
            {
                cts.Cancel();
                IsCancelled = true;
                System.Diagnostics.Debug.WriteLine("Cancelled!");
                string msJsonSerializerString = JsonConvert.SerializeObject(ContentOb,Formatting.Indented);
                string fileName = DateTime.Now.ToString("yyyyMMddHHmmssffff") + ".txt";
                using(StreamWriter streamWriter=new StreamWriter(fileName,true,Encoding.UTF8))
                {
                    streamWriter.WriteLine(msJsonSerializerString);
                }
            }
            #endregion
    
            #region Properties
            private ObservableCollection<string> ContentObValue;
            public ObservableCollection<string> ContentOb
            {
                get
                {                 
                    return ContentObValue;
                }
                set
                {
                    if(value!=ContentObValue)
                    {
                        ContentObValue = value;
                        OnPropertyChanged("ContentOb");
                    }
                }
            }
            #endregion
        }
    }
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 using System.Windows;
     7 using System.Windows.Controls;
     8 using System.Windows.Data;
     9 using System.Windows.Documents;
    10 using System.Windows.Input;
    11 using System.Windows.Media;
    12 using System.Windows.Media.Imaging;
    13 using System.Windows.Navigation;
    14 using System.Windows.Shapes;
    15 using WpfApplication1.ViewModel;
    16 
    17 namespace WpfApplication1
    18 {
    19     /// <summary>
    20     /// Interaction logic for MainWindow.xaml
    21     /// </summary>
    22     public partial class MainWindow : Window
    23     {
    24         public MainWindow()
    25         {
    26             InitializeComponent();
    27             WpfVM vm = WpfVM.GetWpfVM();
    28             this.DataContext = vm;
    29         }
    30     }
    31 }

    private void ClickCmdExecuted(object obj)
    {
    ContentOb = new ObservableCollection<string>();
    Task.Run(() =>
    {
    while (!cts.IsCancellationRequested)
    {
    Content = DateTime.Now.ToString("yyyyMMddHHmmssffff");
    App.Current.Dispatcher.BeginInvoke((Action)delegate
    {
    ContentOb.Add(Content);
    });
    System.Diagnostics.Debug.WriteLine(Content);
    }
    },cts.Token);
    }

  • 相关阅读:
    2019.6.1 模拟赛——[ 费用流 ][ 数位DP ][ 计算几何 ]
    LOJ 2721 「NOI2018」屠龙勇士——扩展中国剩余定理
    AGC033 D~F——[ 值放到角标的DP ][ 思路+DP ][ 思路 ]
    LOJ 2719 「NOI2018」冒泡排序——模型转化
    LOJ 3094 「BJOI2019」删数——角标偏移的线段树
    CF 717A Festival Organization——斯特林数+递推求通项+扩域
    LOJ 3090 「BJOI2019」勘破神机——斯特林数+递推式求通项+扩域
    洛谷 4723 【模板】线性递推——常系数线性齐次递推
    bzoj 3924 幻想乡战略游戏 —— 动态点分治
    计算几何整理
  • 原文地址:https://www.cnblogs.com/Fred1987/p/11945976.html
Copyright © 2011-2022 走看看