C# 获取错误-未处理System.InvalidOperationException

C# 获取错误-未处理System.InvalidOperationException,c#,multithreading,invalidoperationexception,C#,Multithreading,Invalidoperationexception,我刚刚开始学习windows应用程序开发,我们已经获得了开发一个windows应用程序的自学项目。我正在尝试创建用于发送电子邮件的应用程序。我创建了一个类来处理这个问题。当我从主窗体调用该类时,我得到以下错误 System.InvalidOperationException未处理 错误消息--> 跨线程操作无效:从创建控件“pictureBox1”的线程以外的线程访问控件“pictureBox1”` stacktrace如下所示: System.InvalidOperationException

我刚刚开始学习windows应用程序开发,我们已经获得了开发一个windows应用程序的自学项目。我正在尝试创建用于发送电子邮件的应用程序。我创建了一个类来处理这个问题。当我从主窗体调用该类时,我得到以下错误

System.InvalidOperationException未处理

错误消息-->

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

stacktrace如下所示:

System.InvalidOperationException was unhandled
Message=Cross-thread operation not valid: Control 'pictureBox1' accessed from a thread other than the thread it was created on.
Source=System.Windows.Forms
StackTrace:
   at System.Windows.Forms.Control.get_Handle()
   at System.Windows.Forms.Control.SetVisibleCore(Boolean value)
   at System.Windows.Forms.Control.set_Visible(Boolean value)
   at UltooApp.Form1.sendMethod() in D:\Ultoo Application\UltooApp\UltooApp\Form1.cs:line 32
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()
InnerException: 
代码:


您可以在GUI线程中访问表单GUI控件
并且您正试图访问外部GUI线程,这是导致异常的原因。您可以使用MethodInvoker访问GUI线程中的控件

void sendMethod()
{
    MethodInvoker mi = delegate{
       string lblText = (String) MsgSender.sendSMS(to, msg, "hotmail", uname, pwd);
       pictureBox1.Visible = false;
       lblMsgStatus.Visible = true;
       lblMsgStatus.Text = 
             lblText + "\nFrom: " + uname + 
             " To: " + cmbxNumber.SelectedItem + " " + count;
   }; 

   if(InvokeRequired)
       this.Invoke(mi);
}

检查内部异常是否没有任何有用的信息。
void sendMethod()
{
    MethodInvoker mi = delegate{
       string lblText = (String) MsgSender.sendSMS(to, msg, "hotmail", uname, pwd);
       pictureBox1.Visible = false;
       lblMsgStatus.Visible = true;
       lblMsgStatus.Text = 
             lblText + "\nFrom: " + uname + 
             " To: " + cmbxNumber.SelectedItem + " " + count;
   }; 

   if(InvokeRequired)
       this.Invoke(mi);
}