thread with multiple parameters

前端 未结 11 1443
一生所求
一生所求 2020-11-29 04:16

Does anyone know how to pass multiple parameters into a Thread.Start routine?

I thought of extending the class, but the C# Thread class is sealed.

Here is wh

相关标签:
11条回答
  • 2020-11-29 04:51

    .NET 2 conversion of JaredPar answer

    Thread standardTCPServerThread = new Thread(delegate (object unused) {
            startSocketServerAsThread(initializeMemberBalance, arg, 60000);
        });
    
    0 讨论(0)
  • 2020-11-29 04:56

    Here is a bit of code that uses the object array approach mentioned here a couple times.

        ...
        string p1 = "Yada yada.";
        long p2 = 4715821396025;
        int p3 = 4096;
        object args = new object[3] { p1, p2, p3 };
        Thread b1 = new Thread(new ParameterizedThreadStart(worker));
        b1.Start(args);
        ...
        private void worker(object args)
        {
          Array argArray = new object[3];
          argArray = (Array)args;
          string p1 = (string)argArray.GetValue(0);
          long p2 = (long)argArray.GetValue(1);
          int p3 = (int)argArray.GetValue(2);
          ...
        }>
    
    0 讨论(0)
  • 2020-11-29 04:57

    You can't. Create an object that contain params you need, and pass is it. In the thread function cast the object back to its type.

    0 讨论(0)
  • 2020-11-29 04:57

    You can take Object array and pass it in the thread. Pass

    System.Threading.ParameterizedThreadStart(yourFunctionAddressWhichContailMultipleParameters) 
    

    Into thread constructor.

    yourFunctionAddressWhichContailMultipleParameters(object[])
    

    You already set all the value in objArray.

    you need to abcThread.Start(objectArray)

    0 讨论(0)
  • 2020-11-29 05:02
    void RunFromHere()
    {
        string param1 = "hello";
        int param2 = 42;
    
        Thread thread = new Thread(delegate()
        {
            MyParametrizedMethod(param1,param2);
        });
        thread.Start();
    }
    
    void MyParametrizedMethod(string p,int i)
    {
    // some code.
    }
    
    0 讨论(0)
  • 2020-11-29 05:03

    I've been reading yours forum to find out how to do it and I did it in that way - might be useful for somebody. I pass arguments in constructor which creates for me working thread in which will be executed my method - execute() method.

     using System;
    
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Diagnostics;
    using System.Windows.Forms;
    using System.IO;
    using System.Threading;
    namespace Haart_Trainer_App
    
    {
        class ProcessRunner
        {
            private string process = "";
            private string args = "";
            private ListBox output = null;
            private Thread t = null;
    
        public ProcessRunner(string process, string args, ref ListBox output)
        {
            this.process = process;
            this.args = args;
            this.output = output;
            t = new Thread(new ThreadStart(this.execute));
            t.Start();
    
        }
        private void execute()
        {
            Process proc = new Process();
            proc.StartInfo.FileName = process;
            proc.StartInfo.Arguments = args;
            proc.StartInfo.UseShellExecute = false;
            proc.StartInfo.RedirectStandardOutput = true;
            proc.Start();
            string outmsg;
            try
            {
                StreamReader read = proc.StandardOutput;
    
            while ((outmsg = read.ReadLine()) != null)
            {
    
                    lock (output)
                    {
                        output.Items.Add(outmsg);
                    }
    
            }
            }
            catch (Exception e) 
            {
                lock (output)
                {
                    output.Items.Add(e.Message);
                }
            }
            proc.WaitForExit();
            var exitCode = proc.ExitCode;
            proc.Close();
    
        }
    }
    }
    
    0 讨论(0)
提交回复
热议问题