/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
Active-X: Bliver Mit RaiseEvent benyttet a~
Fra : bnj


Dato : 10-12-01 12:00

Kan man på nogen måde finde ud af om et RaiseEvent bliver benyttet af
client(er)?

/ Bo



 
 
Carsten Suurland (10-12-2001)
Kommentar
Fra : Carsten Suurland


Dato : 10-12-01 12:25

Hej Bo

Umiddelbart (det kan være der er andre smarte metoder) så er den eneste måde
vel egentligt, at overføre en variabel ByRef i dit event. Denne variabel kan
de respektive klienter så ændre, så du kan se at der er reageret på
eventet...

Skal du kende forskel på de klienter der reagerer på eventet, skal du
tildele hver klient et entydigt ID, som de så kan sende tilbage til dig.

F.eks

Public Event MyEvent(Byval Arg1 As Long, ByRef ClientID As String)

/Carsten Suurland



bnj (10-12-2001)
Kommentar
Fra : bnj


Dato : 10-12-01 13:23

Tak for svaret.

Ja - sådan gør jeg også nu. Inspireret Cancel variablen i en Forms
"Query_Unload" event.

.... men da det er en Active-X component som jeg har tænkt mig at andre
skulle benytte - synes jeg ikke jeg kan være den slags work-arounds bekendt


I min situation forventer jeg kun een klient. Jeg har en DCOM server hvorfra
jeg udbyder en klasse. Gennen denne klasse kan klienter abbonere på globale
variable og få tilsendt events når disse variable opdateres.

For at kunne sende disse events fra DCOM serveren, vedligeholder jeg en
liste af pointere til klienternes objekter (altså de instantierede klasser).

Problemet med denne fremgangsmåde er at lagringen i denne liste forhindrer
objekterne i at "Terminate" 'e når klienten lukkes.

Derfor prøver jeg nu at benytte Eventet til at detektere om klienten er
væk...

Måske skulle jeg forsøge at sætte pointeren i listen til Nothing fra en
funktion i klassen selv. Hmmm..

/ Bo


"Carsten Suurland" <carsten@suurland.dk> wrote in message
news:_X0R7.5893$z4.723041@news000.worldonline.dk...
> Hej Bo
>
> Umiddelbart (det kan være der er andre smarte metoder) så er den eneste
måde
> vel egentligt, at overføre en variabel ByRef i dit event. Denne variabel
kan
> de respektive klienter så ændre, så du kan se at der er reageret på
> eventet...
>
> Skal du kende forskel på de klienter der reagerer på eventet, skal du
> tildele hver klient et entydigt ID, som de så kan sende tilbage til dig.
>
> F.eks
>
> Public Event MyEvent(Byval Arg1 As Long, ByRef ClientID As String)
>
> /Carsten Suurland
>
>



Carsten Suurland (10-12-2001)
Kommentar
Fra : Carsten Suurland


Dato : 10-12-01 13:57

Hej Bo

Ja, cirkulær reference kan være en bitch...
Vær dog opmærksom på, at dette KUN er et problem hvis dine kontroller m.v.
er lavet i VB5.0.

I VB6 skulle der faktisk blive ryddet op, efter du har sat dine pointere til
Nothing. Også selvom du har cirkulære referencer...

/Carsten



bnj (10-12-2001)
Kommentar
Fra : bnj


Dato : 10-12-01 14:57

Det er VB6 jeg arbejder med .. og objekterne bliver nedlagt som de skal -
men altså først når der ikke længere er referencer til dem - fair nok

/ Bo

"Carsten Suurland" <carsten@suurland.dk> wrote in message
news:Gi2R7.5906$z4.724711@news000.worldonline.dk...
> Hej Bo
>
> Ja, cirkulær reference kan være en bitch...
> Vær dog opmærksom på, at dette KUN er et problem hvis dine kontroller m.v.
> er lavet i VB5.0.
>
> I VB6 skulle der faktisk blive ryddet op, efter du har sat dine pointere
til
> Nothing. Også selvom du har cirkulære referencer...
>
> /Carsten
>
>



Tomas Christiansen (10-12-2001)
Kommentar
Fra : Tomas Christiansen


Dato : 10-12-01 22:19

bnj skrev:
> I min situation forventer jeg kun een klient. Jeg har en DCOM server
hvorfra
> jeg udbyder en klasse. Gennen denne klasse kan klienter abbonere på
globale
> variable og få tilsendt events når disse variable opdateres.
>
> For at kunne sende disse events fra DCOM serveren, vedligeholder jeg
en
> liste af pointere til klienternes objekter (altså de instantierede
klasser).

Hvorfor vedligeholder du selv en liste af pointere til
klient-objekterne?

Når du bruger RaiseEvent, skulle alle server-objektets klienter
(afhænger dog af hvordan du har sat Instancing attributtet på
server-objektet) da gerne kunne modtage eventet!

-------
Tomas


bnj (11-12-2001)
Kommentar
Fra : bnj


Dato : 11-12-01 08:28



"Tomas Christiansen" <toc@blikroer.removethis.dk> wrote in message
news:9v38r7$1ggo$1@news.cybercity.dk...
> bnj skrev:
> > I min situation forventer jeg kun een klient. Jeg har en DCOM server
> hvorfra
> > jeg udbyder en klasse. Gennen denne klasse kan klienter abbonere på
> globale
> > variable og få tilsendt events når disse variable opdateres.
> >
> > For at kunne sende disse events fra DCOM serveren, vedligeholder jeg
> en
> > liste af pointere til klienternes objekter (altså de instantierede
> klasser).
>
> Hvorfor vedligeholder du selv en liste af pointere til
> klient-objekterne?
>



Det er fordi der er forskel på hvilke variable de forskellige klienter skal
have tilsendt.

/ Bo


> Når du bruger RaiseEvent, skulle alle server-objektets klienter
> (afhænger dog af hvordan du har sat Instancing attributtet på
> server-objektet) da gerne kunne modtage eventet!
>
> -------
> Tomas
>



Tomas Christiansen (11-12-2001)
Kommentar
Fra : Tomas Christiansen


Dato : 11-12-01 13:27

bnj skrev:
> > Hvorfor vedligeholder du selv en liste af pointere til
> > klient-objekterne?

> Det er fordi der er forskel på hvilke variable de forskellige klienter skal
> have tilsendt.

Det kunne måske løses ved at sende et generelt "noget er ændret event" ud til alle klienter, som så spørger serveren med et kald af
en "hvad er ændret" modetode.

-------
Tomas


Tomas Christiansen (11-12-2001)
Kommentar
Fra : Tomas Christiansen


Dato : 11-12-01 21:30

Tomas Christiansen vrøvlede:
> Det kunne måske løses ved at sende et generelt "noget er ændret
event" ud til alle klienter, som så spørger serveren med et kald af
> en "hvad er ændret" modetode.

Det sidste ord skulle naturligvis have været "metode".

Tsk tsk tsk.

-------
Tomas


bnj (12-12-2001)
Kommentar
Fra : bnj


Dato : 12-12-01 16:19

Tja..

Jeg "løste" eller rettere omgik problemet, ved at indsætte et ektra
interface lag i form af en ekstra klasse, der instantieres per klient.

Denne klasse modtager alle events fra fælles klassen, men filtrerer hvilke
events der sendes videre til klienten. Således behøver jeg ikke længere
pointer listen og der er ikke problemer med at nedlægge objekterne.

Det er et pænere design .... men det irriterer mig at der er overhead ved at
alle events skal sendes til denne klasse!!! Indtil videre fungerer det, så
jeg må se om mulighederne for at detektere klienternes tilstedeværelse er
nemmer hvis man benytter C++.

/ Bo


"Tomas Christiansen" <toc@blikroer.removethis.dk> wrote in message
news:9v5qba$2091$1@news.cybercity.dk...
> Tomas Christiansen vrøvlede:
> > Det kunne måske løses ved at sende et generelt "noget er ændret
> event" ud til alle klienter, som så spørger serveren med et kald af
> > en "hvad er ændret" modetode.
>
> Det sidste ord skulle naturligvis have været "metode".
>
> Tsk tsk tsk.
>
> -------
> Tomas
>



Tomas Christiansen (10-12-2001)
Kommentar
Fra : Tomas Christiansen


Dato : 10-12-01 22:19

bnj skrev:
> I min situation forventer jeg kun een klient. Jeg har en DCOM server
hvorfra
> jeg udbyder en klasse. Gennen denne klasse kan klienter abbonere på
globale
> variable og få tilsendt events når disse variable opdateres.
>
> For at kunne sende disse events fra DCOM serveren, vedligeholder jeg
en
> liste af pointere til klienternes objekter (altså de instantierede
klasser).

Hvorfor vedligeholder du selv en liste af pointere til
klient-objekterne?

Når du bruger RaiseEvent, skulle alle server-objektets klienter
(afhænger dog af hvordan du har sat Instancing attributtet på
server-objektet) da gerne kunne modtage eventet!

-------
Tomas


Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste