Advertisement
Guest User

Untitled

a guest
Apr 10th, 2020
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.20 KB | None | 0 0
  1. //MainWindow.xaml.cs
  2. private ObservableCollection<FDProcessTab> FDProcessTabs { get; set; }
  3.         public string FDServicePath { get; set; }
  4.         public MainWindow()
  5.         {
  6.             InitializeComponent();
  7.             FDProcessTabs = new ObservableCollection<FDProcessTab>();
  8.             uow = new FaceDetect.DAL.Dapper.UnitOfWork("data source=192.168.12.12,1433;initial catalog=FaceDetectCloud;persist security info=True;user id=sa;password=a9brLBEV;MultipleActiveResultSets=True;App=FDAdmin");
  9.             dahuyaManagementUnits = uow.ManagementUnits.GetAllUnits().ToList();
  10.             foreach(var d in dahuyaManagementUnits)
  11.                 AvailableDevicesList.Items.Add(d);
  12.             FDServicePath = @"C:\Projects\FaceDetect\FaceDetect\bin\Release\SCA\FaceDetect.exe";
  13.         }
  14.  
  15.         private void StartButton_Click(object sender, RoutedEventArgs e)
  16.         {
  17.             if(AvailableDevicesList.SelectedItem!=null && AvailableDevicesList.SelectedItem is DahuyaManagementUnit)
  18.             {
  19.                 var a = AvailableDevicesList.SelectedItem;
  20.                 AvailableDevicesList.SelectedItem = null;
  21.                 AvailableDevicesList.Items.Remove(a);
  22.                 WorkingDevicesList.Items.Add(a);
  23.                 FDProcessTabs.Add(new FDProcessTab(FDServicePath,new List<DahuyaManagementUnit>() { (DahuyaManagementUnit)a }, this));
  24.                 NotifyPropertyChanged("FDProcessTabs");
  25.         }
  26.  
  27. //MainWindow.xaml
  28.             <TabControl x:Name="FDServiceTabs" ItemsSource="{Binding ElementName=_this, Path=FDProcessTabs}">
  29.                 <TabControl.ItemTemplate>
  30.                     <DataTemplate>
  31.                         <TextBlock Text="{Binding  Path=Header}"/>
  32.                     </DataTemplate>
  33.                 </TabControl.ItemTemplate>
  34.                 <TabControl.ContentTemplate>
  35.                     <DataTemplate>
  36.                     <Grid>
  37.                         <Grid.ColumnDefinitions>
  38.                             <ColumnDefinition Width="6*"/>
  39.                             <ColumnDefinition Width="*"/>
  40.                         </Grid.ColumnDefinitions>
  41.                         <TextBox x:Name="ConsoleOutput" Grid.Column="0" Background="Fuchsia" VerticalScrollBarVisibility="Visible" Text="{Binding Path=Text}"></TextBox>
  42.                     </Grid>
  43.                     </DataTemplate>
  44.                 </TabControl.ContentTemplate>
  45.             </TabControl>
  46.  
  47. //FDProcessTab.cs
  48.  
  49.  const int BUFFER_SIZE = 100;
  50.         private Process process;
  51.         private List<DahuyaManagementUnit> units;
  52.         LinkedList<string> text;
  53.  
  54.         public event PropertyChangedEventHandler PropertyChanged;
  55.         private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
  56.         {
  57.             if (PropertyChanged != null)
  58.             {
  59.                 PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
  60.             }
  61.         }
  62.  
  63.  
  64.  
  65.         public List<DahuyaManagementUnit> Units { get => units; }
  66.  
  67.         public string Header { get => units.Select(x => x.HardwareID).Aggregate((i, j) => (i + " " + j)); }
  68.  
  69.  
  70.         public string Text { get => text.Aggregate((i, j) => (i + Environment.NewLine + j)); }
  71.  
  72.         public FDProcessTab(string path, List<DahuyaManagementUnit> _units, MainWindow mainWindow)
  73.         {
  74.             units = _units;
  75.             text = new LinkedList<string>();
  76.             process = new Process();
  77.             process.StartInfo.FileName = path;
  78.             process.StartInfo.Arguments = units.Select(x => x.HardwareID).Aggregate((i,j)=>(i + " "+ j));
  79.             process.EnableRaisingEvents = true;
  80.             process.StartInfo.UseShellExecute = false;
  81.             process.StartInfo.RedirectStandardOutput = true;
  82.             ProcessManager.Processes.Add(process);
  83.            
  84.             //process.StartInfo.CreateNoWindow = true;
  85.             process.OutputDataReceived += (sender, a) => {
  86.                 text.AddLast(a.Data);
  87.                 if (text.Count > BUFFER_SIZE) text.RemoveFirst();
  88.                 NotifyPropertyChanged("Text");
  89.             };
  90.             process.Exited += (sender, a) =>
  91.             {
  92.  
  93.             };
  94.             process.Start();
  95.             process.BeginOutputReadLine();
  96.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement