/* * Costruttore che richiede come parametro il Tab che conterrà questo oggetto */ public MyTabItem(InteractiveTabItem container) { InitializeComponent(); ContainerTab = container; // Ogni MyTabItem si iscrive all'evento che si genera nella MultiMainWindow quando la finestra viene chiusa ContainerTab.MainWindow.ClosingEvent += atClosingTime; // Impostazione del timer per il calcolo delle percentuali ad intervalli di 1 secondo clientStart = lastPercUpdate = DateTime.Now; percentageTimer = new System.Timers.Timer(1000); // Timer impostato come periodico percentageTimer.AutoReset = true; // Funzione da richiamare allo scadere del timer percentageTimer.Elapsed += (obj, e) => { Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() => { percentageUpdate(); })); }; applications = new ObservableCollection <ApplicationItem>(); // Binding della lista alla listView listView.ItemsSource = applications; // Abilitazione dell'accesso alla lista da parte di più thread BindingOperations.EnableCollectionSynchronization(applications, applications); }
/* * Metodo per creare una nuova Tab e aggiungerla a quelle visualizzate */ public void addTab(TcpClient client, NetworkStream stream, String indirizzo) { InteractiveTabItem first = new InteractiveTabItem(this); MyTabItem tab = new MyTabItem(first); first.TabElement = tab; // Impostazione header Tab con l'indirizzo IP first.NewHeader = first.RemoteHost = indirizzo; // Se l'indirizzo è di loopback, viene visualizzato nell'header if (indirizzo.StartsWith("127.")) { first.NewHeader = "Loopback"; } else { // Tentativo di risoluzione del nome host Dns.BeginGetHostEntry(indirizzo, new AsyncCallback((IAsyncResult ar) => { try { // Se la risoluzione è riuscita, il nome host viene visualizzato nell'header string hostName = Dns.EndGetHostEntry(ar).HostName; this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() => { first.NewHeader = hostName; })); } catch (SocketException) { // Se non viene trovato un nome host, la tab mantiene l'indirizzo come header Console.WriteLine("Server {0}: Nessun nome host trovato", indirizzo); } }), null); } tab.Connection = client; tab.Stream = stream; tab.startWork(); first.Content = tab; // Aggiunta della Tab tra quelle visualizzate tabItems.Add(first); // Viene evidenziata l'ultima tab creata tabControl.SelectedIndex = tabItems.Count - 1; // Nel caso ci siano più tab, attiviamo la scelta dell'app in foreground tramite checkbox if (tabItems.Count > 1) { foregroundBox.IsEnabled = true; } }
/* * Metodo che chiude in maniera corretta una Tab */ public void CloseTab(InteractiveTabItem tab) { // Chiusura della mainWindow se non ci sono più tab (richiamo window_close) if (tabItems.Count == 1) { this.Close(); return; } // Rimozione della Tab MyTabItem mytab = tab.TabElement; ClosingEvent -= mytab.atClosingTime; mytab.atClosingTime(); tabItems.Remove(tab); connessioni_attive.Remove(tab.RemoteHost); // Nel caso sia rimasta una sola tab, disattiviamo la scelta dell'app in foreground if (tabItems.Count == 1) { foregroundBox.IsEnabled = false; } }