Vb.net 将收到的SMS分配给文本框时出现InvalidOperationException错误

Vb.net 将收到的SMS分配给文本框时出现InvalidOperationException错误,vb.net,winforms,sms,Vb.net,Winforms,Sms,我有一个完全运行的SMS应用程序,它执行发送和接收的双向过程。我现在正在发送收到的短信。我只向你保证,我能够发送和接收短信 我有一个名为Form1的表单,它包含两个文本框:txtnumber和txtmessage以及一个按钮btnSend。当手动单击btnSend时,消息将发送给收件人,该收件人在txtnumber文本框中显示 我将接收函数从我的模块窗体移动到此窗体1。当收到的短信在这里被读取时。它按下面的代码拆分消息 'Split parts of the Message Received b

我有一个完全运行的SMS应用程序,它执行发送和接收的双向过程。我现在正在发送收到的短信。我只向你保证,我能够发送和接收短信

我有一个名为
Form1
表单,它包含两个文本框:
txtnumber
txtmessage
以及一个按钮
btnSend
。当手动单击
btnSend
时,消息将发送给收件人,该收件人在
txtnumber
文本框中显示

我将接收函数从我的模块窗体移动到此
窗体1
。当收到的短信在这里被读取时。它按下面的代码拆分消息

'Split parts of the Message Received by "_"
Dim textmess As String() = Message.Split("_")
Dim pass As String = textmess(0)
Dim txt As String = textmess(1)
Dim recipients As String = textmess(2)
我所有的文本框和按钮都被隐藏。 然后在多次
如果
之后,它通过这行代码。但在第一部分,我收到了一个
invalidooperationexception
错误

Form1.txtnumber.Text = recipients 'Cross-thread Operation not valid:Control 'txtnumber' accessed from a thread other than the thread it was created on.
Form1.txtmessage.Text = txt
Form1.btnSend.PerformClick()
错误消息是:

跨线程操作无效:
控件“txtnumber”是从创建它的线程以外的线程访问的


任何帮助都将不胜感激。

您的问题正是错误消息所述:您正试图从一个未创建这些控件的线程更新用户界面(即
表单1
上的textbox控件)。那是一个非法的行动,你是不允许这样做的

要解决此问题,您需要“封送”这些更新操作,以在创建UI元素的线程上执行,请参阅

我对项目的其余部分不太了解,但有一种方法可以做到这一点,如下例所示。在本例中,我假设包含文本框的表单名为
Form1

表单1
中添加一个子过程,以执行要执行的操作:

Sub UpdateForSmsSending(ByVal recipients As String, ByVal txt As String)
    txtnumber.Text = recipients
    txtmessage.Text = txt
    btnSend.PerformClick()
End Sub
将您的三行代码(在引发异常的块中)替换为:

If Form1.InvokeRequired Then
     ' Need to marshal updates to UI thread
    Form1.Invoke(Sub() Form1.UpdateForSmsSending(recipients, txt))
Else ' No need to marshal to UI thread
    Form1.UpdateForSmsSending(recipients, txt)
End If

这个问题已经有了答案:@Alex从你给我的链接中,我知道我的文本框应该是可见的。但即使你给了我一个链接,我也不明白该怎么做才能纠正这个错误。