示例完整代码:
Private Sub test()
Clipboard.SetDataObject("test") '<- gives error
End Sub
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
test()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
BackgroundWorker1.RunWorkerAsync()
End Sub
我得到的错误是:
{"Current thread must be set to single thread apartment (STA) mode before OLE calls can be made. Ensure that your Main function has STAThreadAttribute marked on it."}
我尝试过使用
BeginInvoke(New Action(Function() Clipboard.SetDataObject(strText.ToString)))
而不是
Clipboard.SetDataObject(strText.ToString)))
但是得到一条消息说表达式不会产生值。
答案 0 :(得分:1)
在要制作副本的部分中,请尝试:
Private Thr As Threading.Thread
Thr = New Threading.Thread(New Threading.ThreadStart(AddressOf NewThread))
Thr.SetApartmentState(ApartmentState.STA)
Thr.Start()
并定义:
Private Sub NewThread()
Try
Clipboard.SetDataObject(strText.ToString)
Catch ex As Exception
' Log exception
End Try
End Sub