+1. Anything like this should always be multithreaded. Nothing more unprofessional than an app that looks like it has hung!
On Tue, Aug 24, 2010 at 6:47 PM, Cerebrus <[email protected]> wrote: > 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 -
