我创建了一个应用程序,它检查剪贴板中的文本是否以“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
总是给我一个假值。
有人能指出我正确的方向吗?
感谢。
答案 0 :(得分:1)
这里的问题是BackgroundWorkers是MTA(多线程公寓),而Clipboard类只能由STA(单线程公寓)线程使用。
在“bwCopyPaste.RunWorkerAsync()”所在的负载中尝试类似这样的内容。
If Clipboard.ContainsText() then
bwCopyPaste.RunWorkerAsync(ClipBoard.GetText())
End if
然后,您可以通过它的eventArgument获取传递给后台工作程序的值。