AndyF wrote: > Hi Chaps > > I have attempted to purloin some of the code shipped with IP in Action and, > following issues, I have even gone to the lengths of reading the book! > > I am getting the error 'expect Delegate, got Function' when I use the > following code. FYI I am passing in a reference to a WPF textBox so I should > have a dispatcher on my UI element > > I have removed all of the threading pipe reading stuff just to leave 'test' > code: > > import System > import System.IO > import Avacta.Optim.Server.WebServices > import Avacta.Optim.Server.DataModel > import sys > import clr > import time > > from System import Console > from System.Threading import Thread, ThreadStart > > def SetDispatcher(ui_element): > global dispatcher # needed else "Exception: 'NoneType' object has no > attribute 'BeginInvoke'" > dispatcher = ui_element.Dispatcher > > def Dispatch(function, *args): > dispatcher.BeginInvoke(lambda *_: function(*args)) > > def GetDispatchFunction(function): > return lambda *args: Dispatch(function, *args) > > class ListOutput: > def __init__(self, textbox): > self.textbox = textbox > > def write(self, string): > Dispatch(self.addText, string) # error: "expect Delegate, got Function" > # self.addText(string) # ok works fine w-w/o dispatcher stuff > > def addText(self, string): > textbox.AppendText(string) > > if textbox != None: > listout = ListOutput(textbox) > sys.stdout = listout > SetDispatcher(textbox) > > print "Define running" > #running = True > > Thread.Sleep(0) > time.sleep(2) > > print "Start The Comms Thread..." > #comms_t = Thread(ThreadStart(run_comms)) > #comms_t.Start() > > Thread.Sleep(0) > time.sleep(2) > > Any clues would be greatly appreciated!
The WPF invocation functions just take a type which is typed to "Delegate" instead of a type of a specific delegate. Therefore we don't know what type of delegate to create for you automatically. Instead you can convert the Python function into a delegate by calling the delegate type directly, e.g.: dispatcher.BeginInvoke(System.Action(lambda *_: function(*args))) or you can use another delegate type (e.g. System.Action[object]) with the appropriate signature you need. _______________________________________________ Users mailing list Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com