Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Threading methods from other classes?

There is a method that is called continuously in my program and so I want to thread it such that the GUI doesn't freeze whilst it goes about its business.

Thread t = new Thread(Class2.ArrayWorkings(1, MyGlobals.variable1));
    t.start();
        int[] localVariable1 = ??// I want to move the value returned from the method into localVariable1.  

Currently my errors are:

The best overloaded method match for 'System.Threading.Thread.Thread(System.Threading.ParameterizedThreadStart)' has some invalid arguments

&

Argument 1: cannot convert from 'method group' to 'System.Threading.ParameterizedThreadStart'

Currently doing this without threading like:

   int[] localVariabl1 = Class2.ArrayWorkings(1, MyGlobals.variable1);
like image 744
user1166981 Avatar asked Mar 06 '26 08:03

user1166981


1 Answers

You can fix the constructor by using a lambda:

Thread t = new Thread(() => Class2.ArrayWorkings(1, MyGlobals.variable1));

but that doesn't let you (as Jon notes) get the result straight away - otherwise you are writing synchronous code again. You can instead look to some kind of callback; presumably you need to get back to the UI thread, so:

Thread t = new Thread(() => {
    // this runs on the worker
    int[] localVariabl1 = Class2.ArrayWorkings(1, MyGlobals.variable1);
    this.Invoke((MethodInvoker)delegate {
        // now we're back on the UI thread!
        update the UI from localVariabl1
    });
});
t.Start()

I would probably suggest using the thread-pool, though:

ThreadPool.QueueUserWorkItem(delegate {
    // this runs on the worker
    int[] localVariabl1 = Class2.ArrayWorkings(1, MyGlobals.variable1);
    this.Invoke((MethodInvoker)delegate {
        // now we're back on the UI thread!
        update the UI from localVariabl1
    });
});
like image 188
Marc Gravell Avatar answered Mar 07 '26 22:03

Marc Gravell



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!