Porre sotto osservazione con Read Watch due o più file

Da Gambas-it.org - Wikipedia.

Se si tenta di porre sotto osservazione con Read Watch due o più file, e si impostano le due Eventi di lettura "File_Read()" per ciascun file osservato, viene sollevato un errore di coesistenza di più di una della predetta sub-procedura di lettura di file posti sotto osservazione.

Per ovviare a questo grosso problema, che impedisce di porre sotto osservazione con Read Watch due o più file, sono possibili almeno tre soluzioni.

Uso di una Classe specifica aggiuntiva

La prima modalità prevede la creazione - per ciascun file che si intende porre sotto osservazione con le parole chiave Read Watch - di una specifica Classe aggiuntiva.

Nell'esempio astratto, che segue, porremo sotto osservazione due file-device.
Nella Classe principale porremo sotto osservazione un file:

Private fl As File
Public cl As New Class1


Public Sub Main()

' Invochiamo la sub-procedura della Classe secondaria per porre sotto osservazione il secondo file:
 cl.Osserva()

' Poniamo sotto osservazione il primo file:
 fl = Open "/percorso/del/primo/file" For Read Watch
 
End


Public Sub File_Read()
 
 Dim s As String
 
 Read #fl, s, -256

 Print s
 
End

Nella Classe secondaria specifica porremo sotto osservazione il secondo file:

Private fl As File


Public Procedure Osserva()
 
 fl = Open "/percorso/del/secondo/file" For Read Watch
 
End


Public Sub File_Read()
 
 Dim s As String
 
 Read #fl, s, -256

 Print s
 
End


Uso del Metodo "Object.Attach()"

La seconda modalità prevede l'uso del Metodo ".Attach()" della Classe Object.

Private fl1 As File
Private fl2 As File


Public Sub Main()

 fl1 = Open "/percorso/del/primo/file" For Read Watch

' Viene associato il primo oggetto File alla denominazione del proprio evento:
 Object.Attach(fl1, Me, "Eventofile1")


 fl2 = Open "/percorso/del/secondo/file" For Read Watch

' Viene associato il secondo oggetto File alla denominazione del proprio evento:
 Object.Attach(fl2, Me, "Eventofile2")

End


' Vengono intercettati i dati provenienti dal primo file:
Public Sub Eventofile1_Read()

 Dim b1 As Byte

 Read #fl1, b1

 Print b1

End


' Vengono intercettati i dati provenienti dal secondo file:
Public Sub Eventofile2_Read()

 Dim b2 As Byte

 Read #fl2, b2

 Print b2

End


Uso della Classe Observer

La terza modalità prevede l'uso della Classe Observer.

Private fl1 As File
Private fl2 As File


Public Sub Main()

 Dim oss1 As Observer
 Dim oss2 As Observer

 fl1 = Open "/percorso/del/primo/file" For Read Watch

' Viene osservato il primo oggetto File per l'Evento:
 oss1 = New Observer(fl1) As "Eventofile1"


 fl2 = Open "/percorso/del/secondo/file" For Read Watch

' Viene osservato il secondo oggetto File per l'Evento:
 oss2 = New Observer(fl2) As "Eventofile2"

End


' Vengono intercettati i dati provenienti dal primo file:
Public Sub Eventofile1_Read()

 Dim b1 As Byte

 Read #fl1, b1

 Print b1

End


' Vengono intercettati i dati provenienti dal secondo file:
Public Sub Eventofile2_Read()

 Dim b2 As Byte

 Read #fl2, b2

 Print b2

End