C# я могу передать больше чем одни данные в свой целевой метод при использовании ThreadPool?

использовать ThreadPool.QueueUserWorkItem (WaitCallback, Object) запустить поток с моего целевого метода и данных. Я могу передать больше чем одни данные в свой метод? второй параметр в QueueUserWorkItem (WaitCallback, Object) может быть массив?

5
задан Chris S 19 February 2010 в 15:24
поделиться

5 ответов

Вот являются примером использования класса, таким образом, вы можете получить сильно напечатанный pramaters

public class CreateUserTaskInfo
{
    public string username { get; };
    public string password { get; };
    public string sqlServer { get; };
    public string database { get; };
    public string practice { get; };
    public RemoteUserManager client { get; };
    public CreateUserTaskInfo(RemoteUserManager cli, string usr, string pass, string sql, string db, string prac)
    {
        client = cli;
        username = usr;
        password = pass;
        sqlServer = sql;
        database = db;
        practice = prac;
    }
}

public void ExampleFunction(...)
{
    //gather up the variables to be passed in
    var taskInfo = new CreateUserTaskInfo(remote, user, password, SqlInstancePath, AccountID, practiceName);

    //queue the background work and pass in the state object.
    ThreadPool.QueueUserWorkItem(new WaitCallback(RemoteUserManagerClient.CreateUser), taskInfo);
}

static public void CreateUser(object stateInfo)
{
    CreateUserTaskInfo ti = (CreateUserTaskInfo)stateInfo;

    //use ti in the method and access the properties, it will be 
    // the same object as taskInfo from the other method
}
3
ответ дан 18 December 2019 в 11:56
поделиться

Второй параметр может быть массивом, но вам лучше создать собственный класс для содержания ваших данных. Таким образом, передаваемые данные будут полностью типизированы.

4
ответ дан 18 December 2019 в 11:56
поделиться

Все типы в .NET происходят от object, поэтому вы можете передать в QueueUserWorkItem все, что захотите. Просто передайте его в метод WaitCallback.

1
ответ дан 18 December 2019 в 11:56
поделиться

Да, тип аргумента - System.Object, поэтому вы можете передать что угодно. http://msdn.microsoft.com/en-us/library/4yd16hza.aspx

3
ответ дан 18 December 2019 в 11:56
поделиться

Просто верните свой объект состояния обратно, что также применимо к ParameterizedThreadStart :

List<string> list = new List<string> {"1","2","3"};
ThreadPool.QueueUserWorkItem (CallBack, list);

void CallBack(object state)
{
    List<string> list = (List<string>) state;
}
3
ответ дан 18 December 2019 в 11:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: