1

クロススレッドのinvokeが実行されており、invokeは正常に機能しますが、後続のすべての関数呼び出しも呼び出す必要があることがわかりました。そうしないと、例外がスローされます。invokeコマンドを変更する方法、または他の解決策、これを修正しますか?

これは私の現在の呼び出し元です:

foreach (chat_window oc in open_chats)
{
    if (oc.Name == friend)
    {
        string updmsg = msg.Substring(msg.IndexOf('\n')).Trim();
        string[] argNames = new string[2];
        argNames[0] = friend;
        argNames[1] = updmsg;
        Type t = oc.GetType();

        t.InvokeMember("updateChat", 
            System.Reflection.BindingFlags.InvokeMethod, null, oc, argNames);
        }
}

よろしくお願いします、Psy

4

1 に答える 1

1

私はそれchat_windowが派生したいくつかのWinFormsオブジェクトであると推測しControlますか?

その場合は、UIスレッドへの呼び出しをマーシャルするために、Control.Invoke/Control.BeginInvokeを使用することをお勧めします。

oc.Invoke(oc.updateChat, argNames);
于 2009-12-10T13:58:15.837 に答える