剪贴板类的问题

时间:2010-07-21 20:05:02

标签: vb.net

我创建了一个应用程序,它检查剪贴板中的文本是否以“file”开头,如果它以word文件开头,则处理剪贴板文本,然后将其替换为< a href =“some value”>

例如,剪贴板字符串是

  

文件:/// C:/Users/Searock/Desktop/dotnet/Apress.Pro.VB.2008.and.the.dot.NET.3.5.Platform.3rd.Edition.Mar.2008.html#link22

然后程序将处理剪贴板txt,然后将其替换为< a href =“#link22”>

这是我的代码:

变量声明:

Dim strProcess As String
Dim intPos As Integer
Dim check As String
Dim strBuilder As New StringBuilder()

表单加载:

bwCopyPaste.RunWorkerAsync()

BackGroundWorker DoWork活动:

While (True)
     Thread.Sleep(150)

     If bwCopyPaste.CancellationPending = True Then
          Exit While
     End If

     check = Clipboard.GetText()

     If check <> "" Then

     If check.StartsWith("file") Then

     Try

          strProcess = Clipboard.GetText()

          intPos = strProcess.LastIndexOf("#")

          strProcess = strProcess.Substring(intPos, strProcess.Length - intPos)

          strBuilder.AppendFormat("<a href=""{0}"">", strProcess)

          Clipboard.SetText(strBuilder.ToString())

     Catch ex As Exception

          MessageBox.Show("Invalid Url", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Error)
          Application.Restart()

     Finally
          strBuilder.Clear()
     End Try

     End If

End If
End While

我没有得到任何运行时错误,但即使剪贴板中有任何文本,这句话

check = Clipboard.GetText()
If check <> "" Then

总是给我一个假值。

有人能指出我正确的方向吗?

感谢。

1 个答案:

答案 0 :(得分:1)

这里的问题是BackgroundWorkers是MTA(多线程公寓),而Clipboard类只能由STA(单线程公寓)线程使用。

在“bwCopyPaste.RunWorkerAsync()”所在的负载中尝试类似这样的内容。

If Clipboard.ContainsText() then
   bwCopyPaste.RunWorkerAsync(ClipBoard.GetText())
End if

然后,您可以通过它的eventArgument获取传递给后台工作程序的值。