2010-10-12 69 views
0

这是我的情况,我想知道是否有可能完成什么我打算做:触发方法 - Windows窗体

我有一个类库(在C#中作出的)是内部有一个从System.Windows.Forms.Form继承的类(名为SForm)。在那个类中,我声明了一些字符串以及设置这些字符串值的方法。

public class SForm : Form 
{ 
    public string _myDate; 
    public void setTime(string val) { _mydate = val; } 
} 

在另一类,我做出触发回调的API了电话,当回调发生时,调用的方法中,从表继承的类设置值。所有的工作都很好,所有的类都被封装在一个DLL中。

public class Events 
{ 
    private SForm _form; 
    public void setForm(SForm f) 
    { 
    _form = f; 
    } 
    public void connect() 
    { 
    //when I call this method, connects to a device using the API, and if 
    //it's succesful, triggers OnCallback... 
    } 
    private void OnCallback(string retVal) 
    { 
    _form.setTime(retVal); //this works 
    } 
} 

这里是我的问题:我有一个桌面应用程序,在VB中,使用该DLL,当我从SForm继承,我想由DLL触发回调调用方法在我的形式

Public Class Form1 
    Inherits SForm 

    Private _se As Events 

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) _ 
    Handles Me.Load 
    _se = New Events() 
    _se.setForm(Me) 
    _se.connect() 
    End Sub 

    Private Overloads Sub setTime(ByVal s As String) 
    MessageBox.Show(s) 
    End Sub 

我需要的是回调触发在这种形式的“setTime”方法,并显示我的DLL发送的值(我可以推一个按钮并访问_myDate字符串的值,但我需要它自动)。那可能吗?怎么样??

谢谢百万

回答

1

您需要声明setTime()虚拟,以便您可以覆盖它。不要忘记调用基本方法。

+0

我不明白...我应该在哪里调用基本方法?我需要的是,当API触发OnCallback时,它会异步触发VB窗体上的方法... – ditto1977 2010-10-12 14:35:49

+0

您应该使用override方法调用它。为什么这必须是异步的?使用表单时非常棘手,只能在创建它们的同一个线程中触摸控件。 – 2010-10-12 14:48:53

+0

,因为我不知道什么时候OnCallback会被触发......我只是真的很想知道什么时候调用这个方法,所以我认为让OnCallback调用一个Form类的方法,会让它“推”如果这个表格是继承的... – ditto1977 2010-10-12 14:55:10