Hallo Zusammen,
Ich hab mal eine "wahrscheinlich" ganz einfach zu beantwortende Frage.
Ich habe eine dll die mit einer Hardware kommuniziert. Und eine GUI die den Status der Kommunikation anzeigen soll. (Dll und GUI sind selbst geschrieben)
Die dll hat ein Property
public string Status { get; set; }
Die GUI (Form) soll jetzt immer den aktuellen Wert von Status in einer TextBox ausgeben.
Tja aber da habe ich leider keine Ahnung wie man das am besten löst.
Danke für eure Hilfe
Grüße
Steven
Eine DLL kann nicht einfach so eine Property irgendwo im luftleeren Raum haben.
Die Property muss ja irgendwie Teil einer Instanz einer Klasse o.ä. sein...? Magst den genauen Kontext erklären?
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hi,
Ich hab hier mal ein Beispiel Code. Wenn sich der Wert von "Status" ändert, soll die GUI den Wert in einer TextBox anzeigen.
Ich hoffe so ist es klarer was ich vorhabe. 😃
Dll
namespace DemoDll
{
public class ClassDll
{
public string Status { get; set; }
int milliseconds = 1000;
public void DoSomethingIntheDll()
{
Status = "Start";
for (int i = 0; i < 10; i++)
{
Thread.Sleep(milliseconds);
Status=". "+i;
}
Thread.Sleep(milliseconds);
Status = "Fertig";
}
}
}
Form
namespace FormToTestDll
{
public partial class Form1 : Form
{
DemoDll.ClassDll demoDll = new DemoDll.ClassDll();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
Thread main = new Thread(demoDll.DoSomethingIntheDll);
main.Start();
}
private void button2_Click(object sender, EventArgs e)
{
textBox1.Text=demoDll.Status.ToString();
}
}
}
Wenn die Klasse der Instanz, zu der die Property gehört, keine Implementierung über eine aktive Benachrichtigung bei Änderung hat (zB ein Event), dann musst das eben die ganze Zeit periodisch abfragen, zB mit Hilfe eines PeriodicTimers.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Wie Abt geschrieben hat, verwende ein Event dafür, s. [FAQ] Eigenen Event definieren / Information zu Events (Ereignis/Ereignisse).
Und da der Aufruf aus einem Thread erfolgt, mußt du UI-Ausgaben synchronisieren: [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)
Du solltest, statt mit Threads zu arbeiten, dich auch mal über asynchrone Programmierung informieren: Task
, await
/ async
.