2012-01-09 78 views
0

我有2个线程:UI和服务器。如果服务器线程收到一些消息,则必须将其交给UI。这就是我使用invoke-method的原因。当发生c#Invoke()时,我得到一个参数异常

public class Server 
    { 
    private Form1 myForm; 
    private String server; 

    public Client(Form1 myForm1, String serv) 
    { 
    myForm = myForm1; 
    server = serv; 
    } 
    delegate void SetTextCallback(string text, Int16 position); 
    public void connection() 
    {.... 
    try 
     { 
     //Connection succeed 
     //got message 
     SetText(data[0], Convert.ToInt16(data[1])); 
     ... 
     }catch (ArgumentException ae) 
      { 
       ... 
      } 
      catch (SocketException se) 
      { 
       .... 
      } 
    } 
    private void SetText(string text, int position) 
    { 
    if (myForm.InvokeRequired) 
       { 
        SetTextCallback d = new SetTextCallback(
             this.myForm.SetTextToListBox1); 
        myForm.Invoke(d, new object[] { text, position }); 
       } 
    } 

在UI方面我有这个

public void SetTextToListBox1(String text, Int16 position){} 

当我调试,我可以看到,在setText()我得到一个ArgumentException。

+1

有没有使用BackgroundWorker的理由吗?请同时展开ArgumentException,是否有消息以及堆栈跟踪中的内容? – 2012-01-09 14:02:56

回答

0

如果粘贴的代码是正确和完整的,你必须改变this.myForm.SetTextToListBox1this.myForm.SetText

+0

但我的用户界面没有方法SetText()... – Julia 2012-01-09 14:16:56

+0

我有一个smartdevice项目,这就是为什么我不能使用backgroundworker。 – Julia 2012-01-09 14:18:42

+0

catch(ArgumentException ae) { actInfo + =“ArgumentNullException:{0}”+ ae; } // actInfo是一个包含所有服务器日志的字符串 – Julia 2012-01-09 14:21:20

相关问题