I have a calculating thread function which invokes message function from other thread using Invoke and I want that calculating thread to get value(of valuetype, like integer) from that message function. How can I do this?
The problem is that I still get old value of x variable after Invoke(...) and I expect value of 15
delegate void mes_del(object param);
void MyThreadFunc()
{
...
int x = 5;
object [] parms = new object []{x};
Invoke(new mes_del(MessageFunc), (object)parms);
...
}
void MessageFunc(object result)
{
int res = 15;
(result as object[])[0] = res;
}
I tried some approaches like using object[], object as parameters with no success. I though boxing/unboxing operations should occur in such a case but they don't. Should I use auxiliary type like it is done in .NET event mode and create mediator object like class holder { public int x; }
What the above code does is declare a local variable, assign it the value 5, then construct an
object[]array containing one element which is a copy of that local variable.You then pass this array into your
Invokecall.I think what you'll find is that after
Invokeis called,parms[0]is 15. But this does not affectx, which would actually have to be passed as arefparameter for any method to be able to modify its local value.What I've seen done before is something like this:
Then you could do: