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
相关产品推荐
相关产品推荐

