2012-01-09 19 views
0

私は2つのスレッドを持っています:UIとサーバー。サーバスレッドがいくつかのメッセージを受け取った場合は、それをUIに渡す必要があります。だからこそ私はinvoke-methodを使う。 UI側で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 }); 
       } 
    } 

私はsetText()に私はArgumentExceptionがを得ることを見ることができますデバッグするとき、私はこの

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

を持っています。

+1

this.myForm.SetTextToListBox1を変更する必要が完了した場合は、BackgroundWorkerのを使用していない理由は?また、ArgumentExceptionを展開してください。メッセージがあり、スタックトレースには何がありますか? –

答えて

0

貼り付けたコードが正しく、あなたがthis.myForm.SetText

+0

しかし私のUIにはSetText()メソッドがありません... – Julia

+0

私はsmartdeviceのプロジェクトを持っています。そのため、私はbackgroundworkerを使うことができません。 – Julia

+0

catch(ArgumentException ae) { actInfo + = "ArgumentNullException:{0}" + ae; } // actInfoはすべてのサーバーログを含む文字列です – Julia