Avatar billede koppelgaard Praktikant
21. juni 2010 - 14:12 Der er 1 kommentar og
1 løsning

Statusform vha af singleton - virker med Windows.Timer med ikke med System.Timers

opfølgning på
http://www.eksperten.dk/spm/912074#reply_7606214
Jeg vil gerne skrive programstatus til en form.
Forestillet mig en en form som oprettes af en singleton klasse og som hvorigennem en liste i formen opdateres med programstatus.

Denne virke imidlertid ikke under System.Timers som jeg bruger i mit program, kun under Windows.timers.
Jeg går ud fra at System.Timers er en baggrundstråd.
Men hvordan får jeg formen til at statusformem til at opdatere
Det gør den nemlig ikke med System.Timers.

projektet er lagt på
http://www.mediafire.com/?sharekey=1f08bf73f6f73e891f8e0fff488e27e05a7bd664ce4d9fa432ff2c601b65dabd

using System;


namespace WindowsFormsApplication2
{
    public sealed class SingletonLogger
    {
        static SingletonLogger instance = null;
        static readonly object padlock = new object();
        StatusForm f;
        SingletonLogger()
        {
            f = new StatusForm();
            f.Show();
        }
        public static SingletonLogger Instance
        {
            get
            {
                lock (padlock)
                {
                    if (instance == null)
                    {
                        instance = new SingletonLogger();
                    }
                    return instance;
                }
            }
        }

        public void logDataToForm(string str)
        {
            try
            {
                lock (this)
                {
                    f.AddToListBox1(str); 
                }
            }
            catch { }
        }
    }
}

-------------------
formen
-------------------

using System;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    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);
            }

        }       
     
    }
}
Avatar billede Syska Mester
24. juni 2010 - 23:51 #1
Fejlen er ?

Cross violation ?
Avatar billede koppelgaard Praktikant
02. september 2010 - 10:38 #2
Lukker
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester