Autor Beitrag
Jason_Gregory
Hält's aus hier
Beiträge: 14

Win 7, Ubuntu
VS C# Exp, Delphi 7, SQL, Lua
BeitragVerfasst: Di 24.08.10 14:49 
Hallo zusammen,

ich habe ein winzig-kleines Problem, undzwar möchte ich
meiner Highlighting RTB-Box einen Hintergrund Thread erstellen,
der während der Laufzeit alle Zeichenfolgen auf hintergelegte
Begriffe prüft, die aus einem Stream gelesen werden.
So nun mein Problem, ich möchte den Backgroundworker ab einem Zeitpunkt
Asyncrom starten und auf einen public setzen der mit den Form-Elementen
der Richtextbox arbeitet. So nun mein Problem, der e.Result oder e.Argument
(bin grade nicht an meiner IDE) Aufruf fordert einen Rückgabewert.
ABER da ich ja auf ein Form-Element zugreifen möchte das nicht in/für dieses
public erstellt wurde, muss ich ja davor den Delegaten für den Thread ausführen.
(Also mit Steuerelement.Invoke(new Methodinvoker...)).

Wer es nicht weiß, der Methodinvoker verlangt einen Void (also keine Rückgabewert)
für das Pubic.


Wie schaffe ich es, das mein Backgroundworker mit Formelementen ohne dem Methodinvoker/Invoke
arbeitet (Bitte nicht vorschlagen Thread Instanzen zu verwenden) ?
Necaremus
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 203
Erhaltene Danke: 18

Win > XP, Vista, 7; Android 2.1
C# > VS '08,'10; Delphi7
BeitragVerfasst: Di 24.08.10 15:13 
keine ahnung ob es dir hilft, aber so hab ich das prob bei mir mal gelöst:

globale variablen, die den inhalt der zu verwendeten werte haben (z.B. nen string der in ner textbox soll) und dann im finish event die controls erst bearbeitet.

du könntest auch rekursiv arbeiten, sodass dein finish event unter bestimmten umständen nen background worker wieder aufruft.(sodass das bearbeiten schon während des arbeitens geschehen kann)

ist nicht unbedingt "schön" aber so geht es auf jeden fall^^

Für diesen Beitrag haben gedankt: Jason_Gregory
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 24.08.10 16:35 
Du brauchst bei Invoke nur einen eigenen Delegaten zu erstellen und diesen dann angeben, z.B.
ausblenden C#-Quelltext
1:
2:
3:
delegate int MyInvoker(/*parameters*/);

int result = (int)control.Invoke(new MyInvoker(method), null); // bzw. new object[] { parameters }

Der Rückgabewert von Control.Invoke ist also der Rückgabewert deines Delegates, man muß nur entsprechend casten (da ansonsten einfach als Typ 'object' zurückgegeben wird).

MethodInvoker ist also nur ein Spezial-Delegate für Methoden ohne Parameter und ohne Rückgabetyp...

Für diesen Beitrag haben gedankt: Jason_Gregory
Jason_Gregory Threadstarter
Hält's aus hier
Beiträge: 14

Win 7, Ubuntu
VS C# Exp, Delphi 7, SQL, Lua
BeitragVerfasst: Mi 25.08.10 08:54 
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Du brauchst bei Invoke nur einen eigenen Delegaten zu erstellen und diesen dann angeben, z.B.
ausblenden C#-Quelltext
1:
2:
3:
delegate int MyInvoker(/*parameters*/);

int result = (int)control.Invoke(new MyInvoker(method), null); // bzw. new object[] { parameters }

Der Rückgabewert von Control.Invoke ist also der Rückgabewert deines Delegates, man muß nur entsprechend casten (da ansonsten einfach als Typ 'object' zurückgegeben wird).

MethodInvoker ist also nur ein Spezial-Delegate für Methoden ohne Parameter und ohne Rückgabetyp...


Danke, hat mir weitergeholfen

_________________
Jason-Gregory.com - Home, Sweat Home