использовать ThreadPool.QueueUserWorkItem (WaitCallback, Object)
запустить поток с моего целевого метода и данных. Я могу передать больше чем одни данные в свой метод? второй параметр в QueueUserWorkItem (WaitCallback, Object)
может быть массив?
Вот являются примером использования класса, таким образом, вы можете получить сильно напечатанный 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
}
Второй параметр может быть массивом, но вам лучше создать собственный класс для содержания ваших данных. Таким образом, передаваемые данные будут полностью типизированы.
Все типы в .NET происходят от object, поэтому вы можете передать в QueueUserWorkItem все, что захотите. Просто передайте его в метод WaitCallback.
Да, тип аргумента - System.Object, поэтому вы можете передать что угодно. http://msdn.microsoft.com/en-us/library/4yd16hza.aspx
Просто верните свой объект состояния обратно, что также применимо к ParameterizedThreadStart :
List<string> list = new List<string> {"1","2","3"};
ThreadPool.QueueUserWorkItem (CallBack, list);
void CallBack(object state)
{
List<string> list = (List<string>) state;
}