Error 1 Invalid expression term ')' C:\Documents and Settings\mko\my documents\visual studio 2010\Projects\WindowsFormsApplication4\WindowsFormsApplication4\Form1.cs 22 53 WindowsFormsApplication4
Error 2 ) expected C:\Documents and Settings\mko\my documents\visual studio 2010\Projects\WindowsFormsApplication4\WindowsFormsApplication4\Form1.cs 22 54 WindowsFormsApplication4
Bare vær klar over det for det meste er dårlig design og frarådes. Da det senere hvis det er et stort projekt, kan blive besværligt at holde øje med hvem der egentlig tilgår den ...
Men til små projektet ... top nice.
Når du er igang ... så se om på IoC contaioners, nice pattern, hvor de fleste også tilbyder singleton.
Korrekt, test cases af en singleton er bare ikke så nem.
Men er det store projekter, og alle gør lidt som de synes, synes jeg den anden andene måde er bedre. Læg også mærke til at jeg skrev frarådes, da det bestemt også i min verden har sin ret.
Så hele tiden pros/cons for singleton. Hvis det endelig var en guld mine af kun gode ting, så ville jeg mene det er mærkeligt det ikke bliver brugt mere.
Singleton er programmørenes svar på religion :-) Enten tror man på "den" eller ej :-P
Tak for input alle sammen. Mit projekt er ikke særlig stort. Så hvis det er helt ude ved nær teoretisk pladder tror jeg, jeg fortsætter med den Singleton men jeg vil helt se på IoC contaioners. Jeg vender måske tilbage med opklarende spørgsmål.
Hvis I andre to vil have lidt at pointene sender I så et svar?
Projektet virker slet ikke som jeg havde forvente det skulle.
Jeg havde forstillet mig at kunne bruge det til kontrol af mit program ved at sende data til singletonformen fra forskellige procedure. Men data skal jo sendes for en form - det havde jeg ikke tænkt over.
Jeg kan selvfølgelig bare lave en alm. singleton og lade den oprette en for i constructoren. Herved må jeg kunne få det ønskede. Prøver lige....
-------------------------- formen -------------------------- 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;
namespace Singleton { public partial class StatusForm : Form { public delegate void AddListBoxText(string message); public StatusForm() { InitializeComponent(); }
public ListBox ListBox { get { return listBox1; } }
public void AddToListBox1(string txt) { if (listBox1.InvokeRequired) { listBox1.Invoke(new AddListBoxText(AddToListBox1), txt);
} else { listBox1.Items.Add( (object)txt); int l = listBox1.Items.Count; if (l > 120) for (int i = 0; i < 60; i++) listBox1.Items.RemoveAt(0); }
} public void AddToListBox2(string txt) { if (listBox2.InvokeRequired) { listBox2.Invoke(new AddListBoxText(AddToListBox2), txt);
} else { listBox2.Items.Add((object)txt); int l = listBox1.Items.Count; if (l > 70) for (int i = 0; i < 10; i++) listBox1.Items.RemoveAt(0); }
public static SingletonLogger Instance { get { if(instance == null) { lock (padlock) { if (instance == null) { instance = new SingletonLogger(); }
} } return instance; } }
Skulle være bedre, da du nu undgår at lave en lock, hvis 2 tråde på samme tid vil tilgå den ... og den ikke er null, så sparer du en lock som er overflødig :-)
Jeg lod - singleton returner statusformen i og kaldte metoden i statusformen på referencen, i stedet for at -kalde en metode i singleton som kalder en metode i statusformen.
Hvorfor mon det virkede - nu ??
Kode :
Først form som jeg kalder fra:
using System; using System.Timers; using System.Windows.Forms;
namespace Singleton { public partial class Form1 : Form {
namespace Singleton { public sealed class SingletonLogger { static SingletonLogger instance = null; static readonly object padlock = new object(); public StatusForm form; SingletonLogger() { form = new StatusForm(); form.Show(); } public static SingletonLogger Instance { get { if (instance == null) { lock (padlock) { if (instance == null) { instance = new SingletonLogger(); }
} } return instance; } }
} } ----------------------------- Statusformen hvis liste opdateres ----------------------------- using System; using System.Windows.Forms;
namespace Singleton { public partial class StatusForm : Form { public delegate void AddListBoxText(string message); public StatusForm() { InitializeComponent(); }
public ListBox ListBox { get { return listBox1; } }
public void AddToListBox1(string txt) { if (listBox1.InvokeRequired) { listBox1.Invoke(new AddListBoxText(AddToListBox1), txt);
} else { listBox1.Items.Add( (object)txt); int l = listBox1.Items.Count; if (l > 120) for (int i = 0; i < 60; i++) listBox1.Items.RemoveAt(0);
formen blev ikke opdateret. Der kom intet ind i listboxen.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.