| |
C# EckeKeine Möglichkeit zwischen zwei Klassen zu kommunizieren? | | | Autor: Fabi99 | Datum: 24.02.16 16:53 |
| Hallo liebe Community,
ich arbeite gerade an einem Projekt mit einer Form und einer zweiten Klasse.
Die zweite Klasse befüllt über einen anderen Thread im Hintergrund eine List<Of T> und die Form soll diese, wenn der Thread fertig ist, bekommen. Diese Liste soll dann in einer ListView auf der Form visualisiert werden.
Ich frage mich aber, wie der Thread die Form benachrichtigen soll, wenn er fertig ist. Ich habe es bereits mit einer ganz normalen Void in der Form1.cs versucht, aber die muss dann ja static sein, damit die andere Klasse sie überhaupt aufrufen kann. Dann kann ich aber logischerweise die ListView nicht mehr erreichen.
Bin ein Umsteiger von VB.NET auf C# und dieses Problem gab es da mit Modulen ja nicht, da mussten die Subs nicht Shared (static) gemacht werden, um sie von woanders aufzurufen.
Kann mir da vielleicht jemand helfen?
Vielen Dank im Voraus.
Gruß
Fabi99 | |
Re: Keine Möglichkeit zwischen zwei Klassen zu kommunizieren? | | | Autor: Manfred X | Datum: 24.02.16 19:01 |
| Hallo!
Wenn der Thread in der unterg. Klasse beendet ist, wird dort ein
entsprechendes Ereignis ausgelöst.
Die Form muß eine Instanz der unterg. Klasse deklarieren und einen
Eventhandler für dieses Ereignis.
Wird das Ereignis ausgelöst (Eventhandler), kann im Formular die Datenbindung
an die (öffentliche) Liste in der untergeordneten Klasse erfolgen (per Invoke).
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public class frmBack : System.Windows.Forms.Form
{
private bool InstanceFieldsInitialized = false;
public frmBack()
{
if (!InstanceFieldsInitialized)
{
InitializeInstanceFields();
InstanceFieldsInitialized = true;
}
SubscribeToEvents();
}
private void InitializeInstanceFields()
{
btnstart = new Button
{
Parent = this,
Text = "Start"
};
lbo = new ListBox
{
Parent = this,
Top = 50
};
}
//Interne Klasse
private class Back
{
//Öffentliche Liste
public List<string> lst = new List<string>();
public delegate void FilledEventHandler();
//Melde-Ereignis
public event FilledEventHandler Filled;
//Öffentliche Methode: Liste füllen
public void fill()
{
System.Threading.Thread th = new System.Threading.Thread(iFill);
//Füllender Thread
th.Start();
}
//Interne Methode
private void iFill()
{
lst.Clear();
for (int i = 0; i <= 10; i++)
{
lst.Add("Item" + i.ToString());
}
if (Filled != null)
Filled();
}
} //Back-Klasse
//Controls in der Hauptform
private Button btnstart;
private ListBox lbo;
//Instanz der internen Klasse
private Back bck = new Back();
//Click-Eventhandler
private void btnstart_Click(object sender, System.EventArgs e)
{
lbo.DataSource = null;
bck.fill();
}
//Filled-Eventhandker (von bck ausgelöstes Event)
private void bck_Filled()
{
//Invoke: ZUgriff auf Control aus anderem Thread
this.Invoke(new MethodInvoker(BindList));
}
private void BindList()
{
lbo.DataSource = bck.lst;
}
//Event handler
private bool EventsSubscribed = false;
private void SubscribeToEvents()
{
if (EventsSubscribed)
return;
else
EventsSubscribed = true;
btnstart.Click += btnstart_Click;
bck.Filled += bck_Filled;
}
private void InitializeComponent()
{
this.SuspendLayout();
//
// frmBack
//
this.ClientSize = new System.Drawing.Size(292, 273);
this.Name = "frmBack";
this.Load += new System.EventHandler(this.frmBack_Load);
this.ResumeLayout(false);
}
private void frmBack_Load(object sender, EventArgs e)
{
//formal
}
} //Formular
}//Namespace | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevDTA 3.0 Pro
SEPA mit Kontonummernprüfung
Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|