Backgroundworker不喜欢剪贴板

时间:2014-06-19 10:54:49

标签: vb.net visual-studio-2008 .net-3.5 backgroundworker clipboard

示例完整代码:

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)))

但是得到一条消息说表达式不会产生值。

1 个答案:

答案 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