【问题标题】:VB.NET ERROR WHEN USING My.Computer.Clipboard.SetText Into thread使用 My.Computer.Clipboard.SetText 进入线程时出现 VB.NET 错误
【发布时间】:2015-04-24 18:52:39
【问题描述】:

当我尝试使用 My .Computer.Clipboard.SetText进入线程

这是我的代码

Imports System.Threading
Public Class Form1
    Dim startth As Thread
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        startth = New Thread(AddressOf Me.MYTHREAD)
        startth.Start()
    End Sub
    Private Sub MYTHREAD()
        AppActivate("Untitled - Notepad")
        My.Computer.Clipboard.SetText(TextBox1.Text)
        SendKeys.SendWait("^(v) {Enter}")
        My.Computer.Clipboard.SetText(TextBox2.Text)
        SendKeys.SendWait("^(v) {Enter}")
    End Sub
End Class

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    异常已经告诉你必须做什么。设置您创建的线程的单元状态:

    startth = New Thread(AddressOf Me.MYTHREAD)
    startth.SetApartmentState(ApartmentState.STA)
    startth.Start()
    

    【讨论】:

    • 非常感谢先生。这解决了我的错误
    • 剪贴板可以存储多种对象,文本只是其中之一。使用这样的对象将始终涉及另一个线程,通常是另一个进程中的一个。因此,此类对象必须是线程安全的,但通常不是。通过从 STA 线程执行此操作,您承诺会处理线程安全要求,因此对象是安全的。这需要永远不会阻塞线程并发送消息循环。请注意,您没有这样做,您撒谎了。这很危险,你很容易使程序死锁。但如果它只是文本,你会侥幸逃脱。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 2012-12-26
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    相关资源
    最近更新 更多