You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET转C#后HDRadioDLL事件处理器无法触发求助

VB.NET转C#后HDRadioDLL事件无法触发的问题

我已花费数小时排查问题,始终无法理解为何相同逻辑的代码在VB.NET程序中正常运行,转换为C#后却失效。两个项目均已引用HDRadioDLL。

VB.NET 工作代码(hdradio.vb)

Imports HDRadioComm.HDRadio
Imports HDRadioComm

Dim hdRadioDLL As New HDRadioComm.HDRadio

Private Sub hdradio_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     AddHandler hdRadioDLL.HDRadioEventTunerTuned, AddressOf HDRadioCore_HDRadioEvent_TUNER_Tuned
     AddHandler hdRadioDLL.HDRadioEventTunerSeeking, AddressOf HDRadioCore_HDRadioEvent_TUNER_Seeking
End Sub

Private Sub HDRadioCore_HDRadioEvent_TUNER_Tuned(ByVal Message As String)
     Debug.WriteLine("called TUNER_Tuned")
End Sub

Private Sub HDRadioCore_HDRadioEvent_TUNER_Seeking(ByVal Message As String)
    Debug.WriteLine("called TUNER_Seeking")
End Sub

上述VB.NET版本代码运行完全正常。

C# 转换代码(cls_hdradio.cs)

using HDRadioComm.HDRadio;
using static HDRadioComm;

public HDRadio hdRadioDLL;

public void startRadio()
{
     hdRadioDLL = new HDRadio();
     hdRadioDLL.HDRadioEventTunerTuned += HDRadioCore_HDRadioEvent_TUNER_Tuned;
     hdRadioDLL.HDRadioEventTunerSeeking += HDRadioCore_HDRadioEvent_TUNER_Seeking;

     if (hdRadioDLL.IsPowered == false)
        {
            hdRadioDLL.HDRadioEventTunerTuned += HDRadioCore_HDRadioEvent_TUNER_Tuned;
            hdRadioDLL.HDRadioEventTunerSeeking += HDRadioCore_HDRadioEvent_TUNER_Seeking;
            hdRadioDLL.AutoSearch = false;
            hdRadioDLL.DebugMode = false;
            hdRadioDLL.ComPortString = comPort;
            hdRadioDLL.RadioType = HDRadio.HardwareType.Automatic;

            if (!hdRadioDLL.IsOpen)
            {
                hdRadioDLL.Open();
            }
        }
}

public void HDRadioCore_HDRadioEvent_TUNER_Tuned(string Message)
{
     Debug.WriteLine("called TUNER_Tuned");
}

public void HDRadioCore_HDRadioEvent_TUNER_Seeking(string Message)
{
     Debug.WriteLine("called TUNER_Seeking");
}

public void cmdSeekPrev()
{
    hdRadioDLL.SeekDown(HDRadioSeekType.ALL);        
}

public void cmdTuneDown()
{
    hdRadioDLL.TuneDown();
}

但调用相关方法时,HDRadioCore_HDRadioEvent_TUNER_Tuned和HDRadioCore_HDRadioEvent_TUNER_Seeking事件始终无法触发。

调用代码对比

VB.NET 调用代码(hdradio.vb)

Private Sub cmdSeekPrev_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSeekPrev.Click
    hdRadioDLL.SeekDown(HDRadioComm.HDRadio.HDRadioSeekType.ALL)
End Sub

Private Sub cmdTuneDown_Click(ByVal sender As Object, ByVal e As EventArgs) Handles cmdTuneDown.Click
    hdRadioDLL.TuneDown()
End Sub

C# 调用代码(mainform.cs)

private void mainform_Load(object sender, EventArgs e)
{
     hdr = new cls_hdradio();

     hdr.startRadio();//calls to the cls_hdradio class function
}

private void cmdSeekPrev_Click(object sender, EventArgs e)
{
    hdr.cmdSeekPrev();//calls to the cls_hdradio class function
}

private void cmdTuneDown_Click(object sender, EventArgs e)
{
    hdr.cmdTuneDown(); //calls to the cls_hdradio class function
}

补充说明:按钮的点击事件可正常触发,只是对应的事件处理器未被调用。例如调用hdr.cmdSeekPrev()时,本应触发HDRadioCore_HDRadioEvent_TUNER_Seeking,但在C#版本中从未发生。请问我遗漏了什么步骤?


内容的提问来源于stack exchange,提问作者StealthRT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 16:57:21