2012-02-23 3 views
0

Моя функция загрузки файлов, используемая для отображения ее прогресса в ProgressBar, но теперь, когда я переместил ее в DLL, это невозможно.Контроль доступа к DLL

Я хотел бы сделать что-то вроде этого (в DLL):

Public Function uploadfile(ByVal name As String, ByVal path As String, ByVal identifier As Integer,ByVal control As ProgressBarThingyHere,ByVal toProgressBar As Boolean) As String 
    'snipped unimportant code 
    If toprogressbar then 
     SendFileWithProggress(path,control) 
    else 
     SendFileNoProgress(path) 
    end if 
End Function 

    'Send File 
    Private Sub SendFileNoProgress(ByVal path As String) 
     sendfile(path, NULL, False) 
    End Sub 

    Private Sub SendFileWithProggress(ByVal path As String, ByVal control As ProgressBarThingyHere) 
     sendfile(path, control, True) 
    End Sub 

Так что я могу просто позвонить (псевдокод)

dll.uploadfile("filename","path",fileID,Form1.ProgressBar1,true) 

или

dll.uploadfile("filename","path",fileID,NULL,false) 

Возможно ли это?

+0

индикатор выполнения должен быть в вашей форме вызова, поэтому DLL должна реализовать механизм обратного вызова, который уведомляет основного вызывающего абонента о ходе обновления файла (может быть, передается в процентах в качестве параметра). – vulkanino

+0

Как я могу позволить callback знать, что «сообщать»? Я никогда раньше не использовал его. – natli

ответ

3

Что-то вроде:

Public Class YourUploadingClassInTheDLL 
    Public Event BytesAreComing(ByVal percent As Integer) 
    Public Event LoadingFinished() 

    private Sub loader(Byval reportStatus as Boolean) 

     Dim percent as Integer = 0 
     ' load the file in a loop maybe 
     Do 
      ' ... 

      if reportStatus Then 
      ' report the percentage to the client by raising an event 
      RaiseEvent BytesAreComing(percent) 
      End If 
    While (...) 

    RaiseEvent LoadingFinished() 
    End Sub 

    Public Sub LoadWithStatusBar() 
     loader(True); 
    End Sub 

    Public Sub LoadWithOutStatusBar() 
     loader(False); 
    End Sub 

End Class 

А в коде клиента:

Private MySplendidDll as MyDLL 

Public Sub Main 
    MySplendidDll = New MyDLL 
    AddHandler MySplendidDll.BytesAreComing, AddressOf BytesAreComingHandler 
End Sub 

Private Sub BytesAreComingHandler(byval percent as integer) 
    ' update the progress bar 
End Sub 

Не забудьте также удалить обработчик события, когда вы закончите.

+0

Работаю отлично, спасибо! – natli

Смежные вопросы