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 sub-procedure 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

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.


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, FMain, "eventofile1")


 fl2 = Open "/percorso/del/secondo/file" For Read Watch
' Viene associato il secondo oggetto File alla denominazione del proprio evento:
 Object.Attach(fl2, FMain, "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