Laden...

Property einer dll Änderungen überwachen und anzeigen

Letzter Beitrag vor einem Monat 5 Posts 242 Views
Property einer dll Änderungen überwachen und anzeigen

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?

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.

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.