Вызов с двумя параметрами различных типов переменных? - PullRequest
1 голос
/ 27 июля 2010

Как я могу написать метод invoke с двумя параметрами различных типов переменных?

    public void InsertStockPrice(double Value, string Company)
    {
        if (InvokeRequired)
        {
            Invoke(new Action<double>(InsertStockPrice), Value); // <- Not sure what to do here
        }
        else
        {
            //Do stuff
        }
    }

Ответы [ 3 ]

4 голосов
/ 27 июля 2010

I подозреваю это то, что имел в виду Джимми (поскольку Control.Invoke действительно не знал бы, что делать с Action<double, string>:

public void InsertStockPrice(double value, string company)
{
    if (InvokeRequired)
    {
        MethodInvoker invoker = () => InsertStockPrice(value, company);
        Invoke(invoker);
    }
    else
    {
        // Do stuff
    }
}

Если вы используете C #2:

public void InsertStockPrice(double value, string company)
{
    if (InvokeRequired)
    {
        MethodInvoker invoker = delegate { InsertStockPrice(value, company); }
        Invoke(invoker);
    }
    else
    {
        // Do stuff
    }
}

Обратите внимание, что я изменил регистр ваших параметров, чтобы он соответствовал обычным соглашениям .NET.

0 голосов
/ 27 июля 2010

Если этот шаблон часто повторяется в коде, вы можете создать маленький вспомогательный метод, подобный этому

static class UiExtensions
{
    public static void SafeInvoke(this Control control, MethodInvoker method)
    {
        if (control.InvokeRequired)
            control.Invoke(method);
        else
            method();
    }
}

this.SafeInvoke(() => { InsertStockPrices(value, company); });
0 голосов
/ 27 июля 2010

Я думаю, что вы ищете, чтобы найти:

Action<Type1,Type2> yourAction = (type1Var, type2Var) => 
    {
       do stuff with type1Var and type2Var;
    }

yourAction(var1, var2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...