One word: Multithreading. It is the only way to keep your UI responsive during long running processes.
If you're new to Multithreading, use the BackgroundWorker class (.NET 2+). On Aug 23, 11:22 pm, Booter <[email protected]> wrote: > Hello All, > > I have been tinkering around with some C# applications that I wrote > over the summer for my job. The one that I have a question about is a > simple app that connects to network printers. The user chooses which > lab printers they want to map and it will map them. I was trying to > incorporate a loading bar so that the user doesn't sit there and keep > clicking my "Map Printers" button since right now it seems like the > program just stalls. > > Now my problem is that when run the program goes into a "This program > is not responding" phase but will still map the printers so to the end > user it appears that the application just crashed and didn't map their > printers. > > Any help/ suggestions to make my app better would be greatly > appriciated. > > Booter > > *****************************CODE************************** > > 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.Runtime.InteropServices; > > namespace WindowsFormsApplication1 > { > > public partial class Form1 : Form > { > // Set up AV Print array > String[] avArray = new string[] {"\\\\sith\\orion","\\\\sith\ > \color_orion","\\\\sith\\sun_av_classroom"}; > > // Set up Anderson Print Array > String[] anderArray = new string[] {"\\\\sith\\Anderson1","\\\ > \sith\\color_anderson"}; > > // Set up Cafe Print array > String[] cafeArray = new string[] {"\\\\sith\\cafe","\\\\sith\ > \color_cafe"}; > > // Set up ERC Classroom Print Array > String[] ercClassArray = new string[] {"\\\\sith\\erc","\\\ > \sith\\color_erc"}; > > // Set up ERC Design Print array > String[] ercDesignArray = new string[] {"\\\\sith\ > \erc_studio","\\\\sith\\erc","\\\\sith\\color_erc"}; > > // Set up GIS Print Array > String[] gisArray = new string[] {"\\\\sith\\gis","\\\\sith\ > \color_gis"}; > > // Set up Merc Print array > String[] mercArray = new string[] {"\\\\sith\\merc","\\\\sith\ > \color_merc"}; > > // Set up Mag Print Array > String[] magArray1 = new string[] {"\\\\sith\\magellan1","\\\ > \sith\\color_magellan","\\\\sith\\magellan2","\\\\sith\\big_plotter","\ > \\\sith\\little_plotter"}; > > // Set up Mag Print Array > String[] magArray2 = new string[] { "\\\\sith\\magellan2", "\\\ > \sith\\color_magellan", "\\\\sith\\magellan1", "\\\\sith\ > \big_plotter", "\\\\sith\\little_plotter" }; > > // Set up Titan Print array > String[] titanArray = new string[] {"\\\\sith\\titan","\\\\sith > \\magellan1","\\\\sith\\color_magellan","\\\\sith\\magellan2","\\\\sith > \\big_plotter","\\\\sith\\little_plotter"}; > > // Set up Viking Print Array > String[] vikingArray = new string[] { "\\\\sith\\Viking", "\\\ > \sith\\magellan1", "\\\\sith\\color_magellan", "\\\\sith\\magellan2", > "\\\\sith\\big_plotter", "\\\\sith\\little_plotter" }; > > [DllImport("winspool.drv")] > public static extern bool AddPrinterConnection(string pName); > > List<string> mappedPrinters = new List<string>(); > List<string> notMappedPrinters = new List<string>(); > > int totalChosen; > int totalMaped = 0; > > public Form1() > { > InitializeComponent(); > } > > public void mapPrinters() > { > if(AV.Checked) > { > //map AV > foreach(string c in avArray) > { > label1.Text = "Attempting to map " + c; > if (AddPrinterConnection(c)) > { > > mappedPrinters.Add(c); > } > else > { > > notMappedPrinters.Add(c); > } > progressBar1.Value++; > } > } > if(Ander.Checked) > { > //map ander > foreach(string c in anderArray) > { > label1.Text = "Attempting to map " + c; > if (AddPrinterConnection(c)) > { > > mappedPrinters.Add(c); > } > else > { > > notMappedPrinters.Add(c); > } > progressBar1.Value++; > } > } > if(ERC_Class.Checked) > { > //map ercClass > foreach(string c in ercClassArray) > if (AddPrinterConnection(c)) > { > > mappedPrinters.Add(c); > } > else > { > > notMappedPrinters.Add(c); > } > progressBar1.Value++; > } > if(ERC_Design.Checked) > { > //map ercDesign > foreach(string c in ercDesignArray) > { > label1.Text = "Attempting to map " + c; > if (AddPrinterConnection(c)) > { > > mappedPrinters.Add(c); > } > else > { > > notMappedPrinters.Add(c); > } > progressBar1.Value++; > } > } > if(GIS.Checked) > { > //map gis > foreach(string c in gisArray) > { > label1.Text = "Attempting to map " + c; > if (AddPrinterConnection(c)) > { > > mappedPrinters.Add(c); > } > else > { > > notMappedPrinters.Add(c); > } > progressBar1.Value++; > } > } > if(I_Cafe.Checked) > { > //map cafe > foreach(string c in cafeArray) > { > label1.Text = "Attempting to map " + c; > if (AddPrinterConnection(c)) > { > > mappedPrinters.Add(c); > } > else > { > > notMappedPrinters.Add(c); > } > progressBar1.Value++; > } > } > // if(IRC.Checked) > // { > // //map IRC PRINTER > // if (AddPrinterConnection("129.82.106.197")) > // MessageBox.Show("Printer at the IRC Lab is > mapped"); > // else > // MessageBox.Show("Printer at the IRC Lab was not > mapped"); > // > // } > if(Mag.Checked) > { > //map mag > foreach (string c in magArray1) > { > label1.Text = "Attempting to map " + c; > if (AddPrinterConnection(c)) > { > > mappedPrinters.Add(c); > } > else > { > > notMappedPrinters.Add(c); > } > progressBar1.Value++; > } > } > if(MERC.Checked) > { > //map merc > foreach(string c in mercArray) > { > label1.Text = "Attempting to map " + c; > if (AddPrinterConnection(c)) > { > > mappedPrinters.Add(c); > } > else > { > > notMappedPrinters.Add(c); > } > progressBar1.Value++; > } > } > if(titan.Checked) > { > //map titan > foreach(string c in titanArray) > { > label1.Text = "Attempting to map " + c; > if (AddPrinterConnection(c)) > { > > mappedPrinters.Add(c); > } > else > { > > notMappedPrinters.Add(c); > } > progressBar1.Value++; > } > } > if(viking.Checked) > { > //map viking > foreach(string c in vikingArray) > { > label1.Text = "Attempting to map " + c; > if (AddPrinterConnection(c)) > { > > mappedPrinters.Add(c); > } > else > { > > notMappedPrinters.Add(c); > } > progressBar1.Value++; > } > } > > if (notMappedPrinters.Count != 0) > { > string prompt = "Printers not mapped: \n"; > foreach (string c in notMappedPrinters) > { > prompt = prompt + c + "\n"; > } > MessageBox.Show(prompt); > } > if (mappedPrinters.Count != 0) > { > string prompt = "Printers mapped: \n"; > foreach (string c in mappedPrinters) > { > prompt = prompt + c + "\n"; > } > MessageBox.Show(prompt); > } > > } > > private void map_printers_Click(object sender, EventArgs e) > { > totalChosen = sum(); > progressBar1.Maximum = totalChosen; > label1.Text = "Please wait. Initialzing program"; > mapPrinters(); > > } > > private void Exit_app_Click(object sender, EventArgs e) > { > Application.Exit(); > } > > private int sum() > { > int sum = 0; > > if (AV.Checked) > sum = sum + avArray.Length; > if (Ander.Checked) > sum = sum + anderArray.Length; > if (ERC_Class.Checked) > sum = sum + ercClassArray.Length; > if (ERC_Design.Checked) > sum = sum + ercDesignArray.Length; > if (GIS.Checked) > sum = sum + gisArray.Length; > if (I_Cafe.Checked) > sum = sum + cafeArray.Length; > // if(IRC.Checked) > // { > // //map IRC PRINTER > // if > (AddPrinterConnection("129.82.106.197")) > // MessageBox.Show("Printer at the IRC > Lab is mapped"); > // else > // MessageBox.Show("Printer at the IRC > Lab was not mapped"); > // > // } > if (Mag.Checked) > sum = sum + magArray1.Length; > if (MERC.Checked) > sum = sum + mercArray.Length; > if (titan.Checked) > sum = sum + titanArray.Length; > if (viking.Checked) > sum = sum + vikingArray.Length; > > return sum; > > } > } > > > > }- Hide quoted text - > > - Show quoted text -
