如何以C#格式处理VB.net类中的共享事件

时间:2018-09-24 14:58:14

标签: c# vb.net event-handling

我有一个在VB.net中编码的WCF引发事件。这些事件是共享的。看起来像这样:

Shared Event onMissingSnapshots()

这是电话:

 Public Shared Sub FireMissingSnapshots()
    RaiseEvent onMissingSnapshots()
End Sub
从WCF回调中调用的

实现:

Private Class StatusCallback
    Implements ServiceReference.TravelSequenceCallback

    Public Sub onMissingSnapshots() Implements ServiceReference.TravelSequenceCallback.onMissingSnapshots
        cWCF_Moteur.FireMissingSnapshots()
    End Sub
End Class

现在,我需要将此类集成到C#WinForm项目中。 Intellisense将看不到Shared事件,因此当我尝试添加委托处理程序时,它将给出错误消息。如何在我的C#项目中实现这些事件?

非常感谢您的时间和帮助

1 个答案:

答案 0 :(得分:1)

您的活动执行不力,尽管我不是100%确信这是造成您问题的原因。我只是尝试了以下方法,它为我工作。我在VB中创建了一个DLL项目,并添加了以下代码:

Public Class Class1

    Public Shared Event MissingSnapshots As EventHandler

    Protected Shared Sub OnMissingSnapshots(e As EventArgs)
        RaiseEvent MissingSnapshots(Nothing, e)
    End Sub

End Class

这是用于声明和引发事件的标准模式,除了通常将Me而不是Nothing用作实例事件的发送者之外。另外,由于您无法覆盖Shared方法,因此没有必要声明OnMissingSnapshots方法Overridable,也没有必要声明Protected。这可能是要走的路:

Public Shared Event MissingSnapshots As EventHandler

Private Shared Sub OnMissingSnapshots(e As EventArgs)
    RaiseEvent MissingSnapshots(Nothing, e)
End Sub

Public Shared Sub RaiseMissingSnapshots()
    OnMissingSnapshots(EventArgs.Empty)
End Su

然后,我将C#WinForms应用程序项目添加到同一解决方案中,并引用了VB项目。我能够毫无问题地添加以下代码,包括Intellisense:

using System;
using System.Windows.Forms;
using ClassLibrary1;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Class1.MissingSnapshots += Class1_MissingSnapshots;
        }

        private void Class1_MissingSnapshots(object sender, EventArgs e)
        {

        }
    }
}