Thread t = new Thread(new ParameterizedThreadStart(loop));
t.Start("Hello world");
private void loop(object obj)
{
string str = (string)obj;
for (int i = 0; i < 100000; i++)
{
// Don't do this: you can't change a control from another thread. Danger Will Robinson!
textBox1.Text = i + str;
}
}
Обратите внимание, что метод loop
должен принимать параметр object
, поэтому вам придется повысить object
до вашего типа.Если вы не хотите, вы можете использовать закрытие и анонимный метод:
string str = "Hello world";
Thread t = new Thread(() => {
for (int i = 0; i < 100000; i++)
{
// Don't do this: you can't change a control from another thread. Danger Will Robinson!
textBox1.Text = i + str;
}
});
t.Start();
Таким образом, анонимный метод «закроется» вокруг str
, и он будет похож как если бы вы передали параметр. Похоже потому что есть различия / проблемы с закрывающими переменными.На самом деле я написал бы что-то похожее на:
string str = "Hello world";
{
string str2 = str;
Thread t = new Thread(() => {
for (int i = 0; i < 100000; i++)
{
// Don't do this: you can't change a control from another thread. Danger Will Robinson!
textBox1.Text = i + str2;
}
});
t.Start();
}
, чтобы никто другой не мог «потрогать» str2
.
Если вам нужно, я могу найти какой-нибудь ответ на SO, объясняющий это"проблема"