ich eine gemeinsame Comms Bibliothek habe, die ich geschrieben habe, zusammen mit unserer Hardware über TCP/IPPassing Daten zurück von einem externen dll mit Gewinden
Die gemeinsame Bibliothek erlaubt es sowohl die Kunden-Anwendung und unser Ingenieur-Tool zu teilen gemeinsamen Code zu kommunizieren . Die allgemeine Bibliothek führt Threads aus, die Daten an Formulare zurückgeben müssen.
Ich habe einige Arbeitscode, aber ich denke, dass es einen einfacheren Weg geben muss, es zu tun.
Dies ist eine vereinfachte Version von dem, was ich habe ...
namespace EngineerTool
{
public delegate void DelegateSearchFinished();
public partial class MainForm : Form
{
public DelegateSearchFinished d_SearchFinished;
Discover discovery;
public MainForm()
{
InitializeComponent();
discovery = new Discover(this.FinishedSearchInvoke);
d_SearchFinished = new DelegateSearchFinished(this.FinishedSearch);
discovery.Start();
}
public void FinishedSearchInvoke()
{
this.Invoke(this.d_SearchFinished, new Object[] {});
}
public void FinishedSearch()
{
// Search has finished here!
}
}
}
namespace DiscoveryTool
{
public delegate void DelegateSearchFinished();
public class Discover
{
DelegateSearchFinished _callFinished;
public Discover(DelegateSearchFinished callFinished)
{
_callFinished = callFinished;
}
public void Start()
{
// starts thread and stuff
}
public void ThreadWorker()
{
_callFinished();
}
}
}
klingt wie eine gute Idee, wird diese alle Thread-sicher sein? –
Ja ... Sie abonnieren basierend auf dem instanziierten Objekt. Sie können eine Thread-ID in den Ereignisargumenten zurücksenden, wenn Sie wissen müssen, wer die Arbeit verarbeitet hat. – CSharpAtl
hat funktioniert perfekt –