【发布时间】:2016-06-08 23:01:23
【问题描述】:
我在 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)
然后此消息消失,但我的表单界面冻结。 我该如何解决这个问题? 非常感谢! 对不起,我的英语不好。
【问题讨论】:
标签: vb.net multithreading interface freeze bass.dll