私は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){}
を持っています。
に
this.myForm.SetTextToListBox1
を変更する必要が完了した場合は、BackgroundWorkerのを使用していない理由は?また、ArgumentExceptionを展開してください。メッセージがあり、スタックトレースには何がありますか? –