winforms - Awesomium in C# Exception Fix? -
i've been working on c# winform project has part in when user keys "enter" button, backgroundworker set new uri in source property of awesomium instance. however, i'm encountering aweinvalidoperationexception ("the calling thread cannot access object because different thread owns it.").
here's sample code of part of work:
private void txt_to_keyup(object sender, keyeventargs e) { if (e.keycode == keys.enter) { backgroundworker.runworkerasync(); } } private void backgroundworker_dowork(object sender, system.componentmodel.doworkeventargs e) { //get values xml file , (not included here anymore it's long) awesomiuminstance.source = new uri("http://maps.google.com?saddr=" + txt_from.text.replace(" ", "+") + "&daddr=" + txt_to.text.replace(" ", "+") + flag + "&view=map&hl=en&doflg=ptk"); }
aweinvalidoperationexception happens @ line 12
awesomiuminstance.source = new uri("http://maps.google.com?saddr=" + txt_from.text.replace(" ", "+") + "&daddr=" + txt_to.text.replace(" ", "+") + flag + "&view=map&hl=en&doflg=ptk");
here's screenshot of exception:
what fix/solution exception?
you need invoke code on ui thread, since not using wpf don't have dispatcher, can try invoke or begininvoke following
this.begininvoke((action)(() => { awesomiuminstance.source = new uri("http://maps.google.com?saddr=" + txt_from.text.replace(" ", "+") + "&daddr=" + txt_to.text.replace(" ", "+") + flag + "&view=map&hl=en&doflg=ptk"); })); invoke causes action execute on thread created control's window handle. begininvoke asynchronous version of invoke means thread not block caller unlike synchronous call blocking.
if doesn't work can use synchronizationcontext
edit: post asynchronous
synchronizationcontext.current.post(_ => { awesomiuminstance.source = new uri("http://maps.google.com?saddr=" + txt_from.text.replace(" ", "+") + "&daddr=" + txt_to.text.replace(" ", "+") + flag + "&view=map&hl=en&doflg=ptk"); }, null); synchronizationcontext assists in executing code on ui thread necessary, delegates passed send or post method invoked in location. (post non-blocking of send.) more detailed explanation please visit this link
if synchronizationcontext.current null check this link when , when not null

Comments
Post a Comment