0

別のスレッドを使用して UI を更新しようとしており、以下のプロセスを使用してそうしていますが、呼び出し中に上記のエラーが発生します。これは許可されていません。

    delegate void SetLabelCallback(string text,string Qmgr);
    private void Set_status(string text, string Qmgr)
    {
        if (this.Status1A.InvokeRequired)
        {
            SetTextCallback d = new SetTextCallback(record_count);
            this.Invoke(d, new object[] { text,Qmgr });
        }
        else
        {
            switch (Qmgr)
            {
                case "GCSSPR1A": this.Status1A.Text = text;
                    break;
                case "GCSSPR1B": this.B1_Status.Text = text;
                    break;
                case "GCSSPR2A": this.A2_Status.Text = text;
                    break;
                case "GCSSPR2B": this.B2_Status.Text = text;
                    break;
                case "GCSSPR3A": this.A3_Status.Text = text;
                    break;
                case "GCSSPR3B": this.B3_Status.Text = text;
                    break;
            }

        }
4

2 に答える 2

1

私もバルドリックと同じようにやります。

彼はラムダ式を使用しており、おそらく次のようなものを使用するでしょう

private void Set_status(string text, string Qmgr)
{ 
    if (this.InvokeRequired)
    {
    this.Invoke(new ReceivedEventHandler(Set_status), new Object[] {text, Qmgr});                
    }
    else 
    {
    }
}

でも、それは問題ではないと思います。

以前、デリゲート ハンドラー/関数呼び出しのパラメーター数と Invoke 宣言で定義されたオブジェクト数が一致しなかったときに、この問題を受け取りました。

this.Invoke(d, new object[] { text, Qmgr, something_missing });

それが役立つことを願っています。

于 2014-01-07T13:36:30.170 に答える