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);
}
}
}
}