使用我的c#事件在VB.NET

本文关键字:VB NET 事件 我的 | 更新日期: 2023-09-27 17:50:18

我用c#写了一个DLL,我想从事件中获得回调。

在c#中,我用下面的方式进行编辑:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using SevenZipControl;
namespace Utlility
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Zipper.ProgressEvent += ProgressChanged;
        }
        delegate void ProgressChangedCallback(int value);
        private void ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            SetProgressBarValue(e.ProgressPercentage);
        }
        private void SetProgressBarValue(int progress)
        {
            if (this.progressBar1.InvokeRequired)
            {
                ProgressChangedCallback d = new ProgressChangedCallback(SetProgressBarValue);
                this.Invoke(d, new object[] { progress });
                return;
            }
            progressBar1.Value = progress;
        }

我在VB中尝试了相同的。. NET,但是IDE已经抱怨我的AddHandler方法:

Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Text
Imports System.Windows.Forms
Imports System.IO
Imports SevenZipControl
Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        AddHandler Zipper.ProgressEvent, AddressOf ProgressChanged(Zipper, ProgressChangedEventArgs)
    End Sub
    Private Sub ProgressChanged(sender As Object, e As ProgressChangedEventArgs)
        SetProgressBarValue(e.ProgressPercentage)
    End Sub
    Private Sub SetProgressBarValue(progress As Integer)
        ProgressBar1.Value = progress
    End Sub
End Class

c#实现工作良好,但在VB。. NET中,IDE告诉我"Zipper"answers"ProgressChangedEventArgs"是一种类型,不能用作表达式。

谁能告诉我我哪里做错了?它还告诉我

使用我的c#事件在VB.NET

您在AddHandler行中包含了太多信息。只做:

AddHandler Zipper.ProgressEvent, AddressOf ProgressChanged

解决方案要困难得多。我必须创建一个临时函数:

    Zipper.Compress(uPathIn, uPathOut, Function(l1, l2)
                                           SetProgressBarValue(0)
                                       End Function)

我不确定这是否是最干净的解决方案,编译器警告我函数function (l1, l2)可能没有有效的返回值,但它做了我想要的一切。