百分求,动态调用dll,如何返回属性?
主程序调用a.dll,a实例中定义一int属性process用于跟踪实例的运行进度。 
 程序运行过程中不断给process赋进度值。   
 请问如何不断返回此process值?   
 本人有个笨方法:将process定义为静态属性,在主程序中通过Timer不断捕捉此属性。 
 缺点:无法交叉运行此实例。   
 请问有何好方法?急
------解决方案--------------------程序运行过程中不断给process赋进度值。 
 ---------------------------------------- 
 在给process赋值的时候可以引发一个自定义事件,在使用的时候给这个事件添加处理代码,或者使用一个普通的委托.
------解决方案--------------------应该在dll中提供触发事件接口出来,这样好处理
------解决方案--------------------应提供一个进度变化事件,并在事件参数e中提供process值
------解决方案--------------------我觉得用委托比较好实现。
------解决方案--------------------写个回调函数吧
------解决方案--------------------dll.... 
 不好说... 
------解决方案--------------------其实这种情况,你应该为该dll定义一个接口。在调用dll的主程序中实现该接口。每次dll的状态有大的变化,都调用该接口方法,而由于该接口的实现在主程序中,所以你可以在主程序中进行状态的变更操作。然后根据情况,查询主程序中的标识值就可以了。
------解决方案--------------------dll代码如下:   
 Public Class ProcessDll   
     Private mProcess As Integer 
     Private WithEvents ProcessTimer As Timers.Timer 
     Public Event ProcessChanged(ByVal Value As Integer)   
     Public Property Process() As Integer 
         Get 
             Return mProcess 
         End Get 
         Set(ByVal value As Integer) 
             If mProcess  <>  value Then 
                 mProcess = value 
                 RaiseEvent ProcessChanged(value) 
             End If 
         End Set 
     End Property   
     Public Sub New() 
         ProcessTimer = New Timers.Timer(500) 
         ProcessTimer.Start() 
     End Sub   
     Protected Overrides Sub Finalize() 
         MyBase.Finalize() 
         If ProcessTimer IsNot Nothing Then ProcessTimer.Stop() 
     End Sub   
     Private Sub ProcessTimer_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles ProcessTimer.Elapsed 
         If Process  < 100 Then Process += 1 Else Process = 0 
     End Sub 
 End Class   
 主程序代码: 
 注意:需要添加引用,窗体Form1上放置一个ProgressBar1控件   
 Public Class Form1   
     Private WithEvents MyProcess As ProcessDll   
     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
         MyProcess = New ProcessDll 
     End Sub   
     Private Sub MyProcess_ProcessChanged(ByVal Value As Integer) Handles MyProcess.ProcessChanged 
         ProgressBar1.Invoke(New RunMySub(AddressOf MySub), Value) 
     End Sub   
     Private Delegate Sub RunMySub(ByVal Value As Integer)   
     Private Sub MySub(ByVal Value As Integer) 
         Me.ProgressBar1.Value = Value 
     End Sub 
 End Class