我在 BackgroundWorker 中有一些代码可以帮助我在 Bass 连接到音频流时防止接口冻结:
Private Sub WorkerConnectToStream_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles WorkerConnectToStream.DoWork
Bass.BASS_StreamFree(StreamNumber)
StreamNumber = Bass.BASS_StreamCreateURL(StreamAddr, 0, BASSFlag.BASS_STREAM_STATUS, _downloadProc_, Me.Handle)
If StreamNumber <> 0 Then
Bass.BASS_ChannelPlay(StreamNumber, True)
End If
End Sub
但我得到: InvalidOperationException 和消息,“控制控件名称从创建它的线程以外的线程访问。” 如果我将 CheckForIllegalCrossThreadCalls 属性设置为 false 或者我从 Debug 文件夹启动我的程序,那么一切正常,但这不是最佳解决方案。
如果我使用:
invoke(sub()
StreamNumber = Bass.BASS_StreamCreateURL(StreamAddr, 0, BASSFlag.BASS_STREAM_STATUS, _downloadProc_, Me.Handle)
end sub)
然后这条消息消失了,但我的表单界面冻结了。我该如何解决这个问题?非常感谢!我很抱歉我的英语不好。