使用我的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"是一种类型,不能用作表达式。
谁能告诉我我哪里做错了?它还告诉我您在AddHandler
行中包含了太多信息。只做:
AddHandler Zipper.ProgressEvent, AddressOf ProgressChanged
解决方案要困难得多。我必须创建一个临时函数:
Zipper.Compress(uPathIn, uPathOut, Function(l1, l2)
SetProgressBarValue(0)
End Function)
我不确定这是否是最干净的解决方案,编译器警告我函数function (l1, l2)可能没有有效的返回值,但它做了我想要的一切。