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
Invoke
call.I think what you'll find is that after
Invoke
is called,parms[0]
is 15. But this does not affectx
, which would actually have to be passed as aref
parameter 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: