1

パラメータを使用して関数をC#の他のスレッドに委任するにはどうすればよいですか?

自分で試してみると、次のエラーが発生します。

error CS0149: Method name expected

これは私が今持っているものです:

delegate void BarUpdateDelegate();
    private void UpdateBar(int Value,int Maximum,ProgressBar Bar)
    {
        if (Bar.InvokeRequired)
        {
            BarUpdateDelegate Delegation = new BarUpdateDelegate(Value, Maximum, Bar); //error CS0149: Method name expected
            Bar.Invoke(Delegation);
            return;
        }
        else
        {
            Bar.Maximum = Maximum;
            Bar.Value = Value;

            //Insert the percentage
            int Percent = (int)(((double)Value / (double)Bar.Maximum) * 100);
            Bar.CreateGraphics().DrawString(Percent.ToString() + "%", new Font("Arial", (float)8.25, FontStyle.Regular), Brushes.Black, new PointF(Bar.Width / 2 - 10, Bar.Height / 2 - 7));

            return;
        }
    }

他のスレッドからメインスレッドのプログレスバーを更新したい。

4

2 に答える 2

3

引数を使用してデリゲートを初期化しないでください。

BarUpdateDelegate Delegation = new BarUpdateDelegate(Value, Maximum, Bar); //error CS0149: Method name expected
Bar.Invoke(Delegation);

代わりに、それらの引数をに渡しますInvoke

BarUpdateDelegate delegation = new BarUpdateDelegate(UpdateBar);
Bar.Invoke(delegation, Value, Maximum, Bar);

また、デリゲート定義でこれらの引数を指定する必要があります。ただし、組み込みのAction<...>デリゲートを使用するより簡単な方法があります。また、他にもいくつかのコードの改善を行いました。

private void UpdateBar(int value, int maximum, ProgressBar bar)
{
    if (bar.InvokeRequired)
    {
        bar.Invoke(new Action<int, int, ProgressBar>(UpdateBar),
                   value, maximum, bar);
    }
    else
    {
        bar.Maximum = maximum;
        bar.Value = value;

        // Insert the percentage
        int percent = value * 100 / maximum;
        bar.CreateGraphics().DrawString(percent.ToString() + "%", new Font("Arial", 8.25f, FontStyle.Regular), Brushes.Black, bar.Width / 2 - 10, bar.Height / 2 - 7);
    }
}
于 2012-07-24T17:17:35.287 に答える
0

これは有効なコードではありません:

BarUpdateDelegate Delegation = new BarUpdateDelegate(Value, Maximum, Bar);

開始点として、MSDNDelegatesのドキュメントを参照してください。

于 2012-07-24T17:15:38.203 に答える