Ragazzi vorrei porvi una domanda...come faccio a sospendere un evento mentre è in esecuzione?Mi spiego:
Ho provato a creare un'applicativo per la lettura dei file XML e ho trovato un file che contiene molte "stringhe" e il programma ci metteva qlk minuto per stamparle tutte...allora mi è sorta la domanda:E' possibile fermare questo evento di lettura del file mentre è in esecuzione?Non vorrei usare i Thread,ma ho sentito parlare del backgroundworker e del fatto che sia molto più semplice tramite questo metodo.Vi presento il codice ovviamente errato,ma spero che possiate capire ciò che volevo fare :-):
codice:using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.Xml; namespace ApriFileXML { public partial class Form1 : Form { XmlTextReader fileX ; public Form1() { InitializeComponent(); backgroundWorker1.WorkerReportsProgress = true; backgroundWorker1.WorkerSupportsCancellation= true; } private void but_sfoglia_Click(object sender, EventArgs e) { ApriFileDialog.Filter = "File xml|*.xml"; if (ApriFileDialog.ShowDialog() == DialogResult.OK) { TxTpercorsoFile.Text = ApriFileDialog.FileName; } } private void but_visualizza_Click(object sender, EventArgs e) { TxTletturaFile.Clear(); try { fileX = new XmlTextReader(TxTpercorsoFile.Text); backgroundWorker1.RunWorkerAsync(); backgroundWorker1.DoWork+=new DoWorkEventHandler(backgroundWorker1_DoWork); } catch (ArgumentException) { MessageBox.Show("Non hai selezionato nessun file XML", "Errore!", MessageBoxButtons.OK, MessageBoxIcon.Error); } catch (FileNotFoundException) { MessageBox.Show("File non trovato", "Errore!", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void but_stop_Click(object sender, EventArgs e) { if (backgroundWorker1.WorkerSupportsCancellation == true) { backgroundWorker1.CancelAsync(); } } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; while (fileX.Read()) { if (worker.CancellationPending == true) { e.Cancel=true; break; } TxTletturaFile.AppendText("Nome:" + fileX.Name); TxTletturaFile.AppendText("BaseURI:" + fileX.BaseURI); TxTletturaFile.AppendText("LocalName:" + fileX.LocalName); TxTletturaFile.AppendText("AttributeCount:" + fileX.AttributeCount); TxTletturaFile.AppendText("LineNumber:" + fileX.LineNumber); TxTletturaFile.AppendText("NodeType:" + fileX.NodeType); TxTletturaFile.AppendText("\n--\n"); } } } }

 
			
			 
			 
					
					
					
						 Rispondi quotando
  Rispondi quotando