m.stephen.barnard at gmail.com
Wed May 14 01:01:03 PDT 2008
I spent a good amount of time prodding like an awkward schoolboy at the
framework with windbg.
Everything is fine from the point of the BeginInvoke thread is created to
the point where the function is being looked up.
The framework spends a good deal of time rooting around in a MethodTable and
looks up and calls a constructor for whatever it found there.
This was the last thing I saw it doing before raising an Access Violation,
though I was looking at the TV whilst stepping so I'm sure I missed
And now I can sleep.
On Tue, May 13, 2008 at 8:41 PM, Matthew Barnard <
m.stephen.barnard at gmail.com> wrote:
> Ah- good catch Dino. Didn't see a "Started," so I failed to notice the
> "Finished." was actually printing ;)
> It appears that, as with the bit of code that provoked this test, start()
> is not being executed by BeginInvoke.
> Thread.Sleep(20000) still drops to "Finished" as soon as the script starts.
> And my assembly skills are nonexistant; you're on your own with windbg.
> On Tue, May 13, 2008 at 7:05 PM, Dino Viehland <
> dinov at exchange.microsoft.com> wrote:
>> Where'd the call to Console.ReadLine go? That's the reason you don't
>> see Finished printing… On 1.1 and 2.0B2 from the console or in a file w/ a
>> call to Console.ReadLine or raw_input I end up seeing finished getting
>> printed. We're simply exiting before the asynchronous operation but that
>> doesn't fully answer the question – started is still never printing!
>> Stranger yet you can call mi() directly showing the delegate is clearly
>> created correctly and working. Anyway, I'll have to look at it closer – it
>> might require windbg to figure out what's going wrong here.
>> *From:* users-bounces at lists.ironpython.com [mailto:
>> users-bounces at lists.ironpython.com] *On Behalf Of *Matthew Barnard
>> *Sent:* Tuesday, May 13, 2008 5:39 PM
>> *To:* IronPython List
>> *Subject:* [IronPython] System.Windows.Forms.MethodInvoker
>> The C# sample runs as expected, displaying 'Started. Finished.', but the
>> ipy does nothing.
>> Can someone enlighten me as to the difference? I assume it is something to
>> do with the way functions are represented in ipy vs. what methodinvoker is
>> looking for,
>> but I'm honestly lost.
>> class foo
>> public void start()
>> public void finish(IAsyncResult r)
>> class Program
>> static void Main(string args)
>> foo bar = new foo();
>> MethodInvoker mi = new MethodInvoker(bar.start);
>> mi.BeginInvoke(new AsyncCallback(bar.finish), null);
>> import clr
>> from System import AsyncCallback
>> from System.Threading import Thread
>> from System.Windows.Forms import MethodInvoker
>> class foo:
>> def start(self):
>> print 'Started.'
>> def finish(self, r):
>> print 'Finished.'
>> bar = foo()
>> mi = MethodInvoker(bar.start)
>> mi.BeginInvoke(AsyncCallback(bar.finish), None)
>> Matthew Barnard
>> Users mailing list
>> Users at lists.ironpython.com
> Matthew Barnard
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Users