Как передавать переменные в поток в C #?

#c#-4.0

#c #-4.0

Вопрос:

В моем коде я запускаю поток. Что мне нужно сделать сейчас, так это передать переменную в метод «sayHello». Поскольку он вызывается в отдельном потоке, мои переменные не видны для потока.

 ThreadStart ts = new ThreadStart(SayHello);
mThread = new Thread(ts);
mThread.Start();
  

Я новичок в C # и, пожалуйста, дайте мне знать, как это сделать.

Комментарии:

1. пожалуйста, прочитайте: albahari.com/threading

Ответ №1:

вот как я передаю значения. Во-первых, ваш параметр должен быть объектом, поэтому вам нужно выполнить приведение в вашем методе. Ваш метод должен возвращать void, если вам нужно возвращать значения, вы можете сделать это разными способами, с помощью изменяемых переменных или обмена потоками и т. Д. Затем:

 string sParameters = "This is my parameter";
Thread thrProcess = new Thread(MyMethod);
thrProcess.IsBackgroud = true;   // only if needed
thrProcess.Start(sParameters);   // string derives from object
  

И в вашем методе:

 void MyMethod(object param)
{
    string sParameterValue = (string)param;
// Now you can work with sParameterValue
}
  

Если вам нужно передать более одной переменной, то создайте класс и присвоите свои значения свойствам и приведите в свой метод, но есть и другие способы архивировать это. Надеюсь, это поможет. Если вам нужна дополнительная информация, проверьте это
ссылка: потоковая передача в C #

Удачи!

Ответ №2:

Вы можете передавать только через объект.

 //Declaring the Thread    
Thread T1;

// Calling the Thread
object[] threadPass = { String1, String2, Int1 };
T1 = new thread(Threadvoid);
T1.Start(threadPass);

// Thread Void
void Threadvoid(object passedObject)
{
    //Take the variables back out of the object
    object[] ThreadPass = passedObject as object[];
    string String1 = ThreadPass[0].ToString();
    string String2 = ThreadPass[1].ToString();
    int Int1 = Convert.ToInt32(ThreadPass[2]);
}