Getting Access Violation stemming from Windows.UI.Xaml.dll in C# WinRT app -


i have winrt app in have page button. button opens 1 of our settings flyouts. in order this, button's click event asynchronous.

in flyout's class have asynchronous show() method returns task, messagedialogs. method initializes resultcompletionsource<object>, along popup. opens popup, returns resultcompletionsource<t>.task can awaited on.

in order multiple panes not created, have set button.isenabled false upon button press, , return true after completion of event (and awaiting task).

the problem having if user rapidly click button in question, crashes app, , unpredictably so. it's after 4 clicks, after 20.

i've tried catching exception , finding out in debugger. finding required debugging native debugger (well, did mixed). exception win32 access violation exception stems windows.ui.xaml.dll.

is not getting marshalled ui thread possibly? popup has flyout child has lightdismissenabled = true, (in scenario) calls closed event, in turn sets result of taskcompletionsource.

some basic code describing issue:

in customflyout:

public task<object> showasync() {     resultcompletionsource = new taskcompletionsource<object>();     parentpopup = new popup();     //set of height/width/bounds of popup, along setting closed event.      parentpopup.child = this;     parentpopup.isopen = true;      return resultcompletionsource.task; }  void parentpopup_closed(object sender, object e) {     if(resultcompletionsource != null)     {         resultcompletionsource.setresult(null);     }      try     {         (sender popup).closed -= parentpopup_closed;     }     catch{} } 

button click in page:

private async void showflyout_button_click(object sender, routedeventargs e) {     showflyout_button.isenabled = false;     try     {         customsettingsflyout flyout = new customsettingsflyout();         await flyout.showasync()     }     catch{}         {         showflyout_button.isenabled = false;     } } 

i don't have access c uielement source, debugger/disassembler gave me stack trace:

>windows.ui.xaml.dll!cuielement::getredirectiontransformsandparentcompnode(crendertarget * prendertarget, transformandclipstack * ptransformstoparentcompnode, cmilmatrix * ptransformtoroot, unsigned int * pistransformtorootanimating, unsigned int * pareallancestorsvisible, hwcomptreenode * * ppnearestcompnode) line 7462   c++ windows.ui.xaml.dll!cuielement::getredirectiontransformsandparentcompnode(crendertarget * prendertarget, transformandclipstack * ptransformstoparentcompnode, cmilmatrix * ptransformtoroot, unsigned int * pistransformtorootanimating, unsigned int * pareallancestorsvisible, hwcomptreenode * * ppnearestcompnode) line 7495    c++ windows.ui.xaml.dll!hwwalk::renderproperties(cuielement * puielement, const hwrenderparams & parentrp, d2drendercontext & d2drendercontext, unsigned int requiresredirecteddrawing, unsigned int * pskiprenderwhileinheritedcollapsed, unsigned int * pskiprenderwhiletransparent, unsigned int * pskiprenderwhileclippedout, unsigned int * pskiprenderwhilelayoutclippedout, unsigned int * pskiprenderwhiletransformtoosmall) line 441   c++ windows.ui.xaml.dll!hwwalk::render(cuielement * puielement, const hwrenderparams & parentrp, d2drendercontext & d2drendercontext, unsigned int redirecteddraw) line 199 c++ windows.ui.xaml.dll!hwwalk::rendercontentandchildren(cuielement * puielement, hwrenderparams & myrp, d2drendercontext & d2drendercontext, unsigned int requiresredirecteddrawing, unsigned int elementhascompnode) line 3461    c++ windows.ui.xaml.dll!hwwalk::renderproperties(cuielement * puielement, const hwrenderparams & parentrp, d2drendercontext & d2drendercontext, unsigned int requiresredirecteddrawing, unsigned int * pskiprenderwhileinheritedcollapsed, unsigned int * pskiprenderwhiletransparent, unsigned int * pskiprenderwhileclippedout, unsigned int * pskiprenderwhilelayoutclippedout, unsigned int * pskiprenderwhiletransformtoosmall) line 629   c++ windows.ui.xaml.dll!hwwalk::render(cuielement * puielement, const hwrenderparams & parentrp, d2drendercontext & d2drendercontext, unsigned int redirecteddraw) line 199 c++ windows.ui.xaml.dll!hwwalk::rendercontentandchildren(cuielement * puielement, hwrenderparams & myrp, d2drendercontext & d2drendercontext, unsigned int requiresredirecteddrawing, unsigned int elementhascompnode)  c++ windows.ui.xaml.dll!hwwalk::renderproperties(cuielement * puielement, const hwrenderparams & parentrp, d2drendercontext & d2drendercontext, unsigned int requiresredirecteddrawing, unsigned int * pskiprenderwhileinheritedcollapsed, unsigned int * pskiprenderwhiletransparent, unsigned int * pskiprenderwhileclippedout, unsigned int * pskiprenderwhilelayoutclippedout, unsigned int * pskiprenderwhiletransformtoosmall) line 629   c++ windows.ui.xaml.dll!hwwalk::render(cuielement * puielement, const hwrenderparams & parentrp, d2drendercontext & d2drendercontext, unsigned int redirecteddraw) line 199 c++ windows.ui.xaml.dll!hwwalk::rendercontentandchildren(cuielement * puielement, hwrenderparams & myrp, d2drendercontext & d2drendercontext, unsigned int requiresredirecteddrawing, unsigned int elementhascompnode) line 3461    c++ windows.ui.xaml.dll!hwwalk::renderproperties(cuielement * puielement, const hwrenderparams & parentrp, d2drendercontext & d2drendercontext, unsigned int requiresredirecteddrawing, unsigned int * pskiprenderwhileinheritedcollapsed, unsigned int * pskiprenderwhiletransparent, unsigned int * pskiprenderwhileclippedout, unsigned int * pskiprenderwhilelayoutclippedout, unsigned int * pskiprenderwhiletransformtoosmall) line 629   c++ windows.ui.xaml.dll!hwwalk::render(cuielement * puielement, const hwrenderparams & parentrp, d2drendercontext & d2drendercontext, unsigned int redirecteddraw) line 199 c++ windows.ui.xaml.dll!hwwalk::renderroot(cuielement * pvisualroot, crendertarget * prendertarget, hwinstance * ppersistentrenderdatasentinel, hwcrossframeresources * pcrossframeresources, hwframedata * ppreviousframedata, unsigned int backgroundcolor, unsigned int forceredraw, unsigned int needstoreleasehardwareresources, unsigned int isoverdrawheatmapenabled, transformandclipstack * pprependtransformandclip, const cmilmatrix & displayorientationtransform, const cmilmatrix & displayorientationtransforminverse, unsigned int forceallslotsdirty, hwcomptreenode * * pprootnode, brushclonelist * * ppbrushclonelist, unsigned int * phasrenderedcontent) line 3847    c++ windows.ui.xaml.dll!ccoreservices::renderwalk(hwwalk * phwwalk, icorerendertarget * pirendertarget, visualtree * pvisualtree, cswapchainbackgroundpanel * pscbp, unsigned int ubackgroundcolor, unsigned int forceredraw, unsigned int needstoreleasehardwareresources, unsigned int isoverdrawheatmapenabled, unsigned int forceallslotsdirty) line 11478  c++ windows.ui.xaml.dll!ccoreservices::nwdrawtree(hwwalk * phwwalk, icorerendertarget * pirendertarget, visualtree * pvisualtree, unsigned int ubackgroundcolor, unsigned int forceredraw, unsigned int needstoreleasehardwareresources, xrect_wh * prcdirtyrect) line 10985    c++ windows.ui.xaml.dll!ccoreservices::nwdrawmaintree(icorerendertarget * pirendertarget, unsigned int fforceredraw, unsigned int needstoreleasehardwareresources, xrect_wh * prcdirtyrect) line 10697  c++ windows.ui.xaml.dll!cwindowrendertarget::draw(icoreservices * pcore, unsigned int fforceredraw, xrect_wh * prcdirtyrect) line 128   c++ windows.ui.xaml.dll!cxcpbrowserhost::ontick() line 1160 c++ windows.ui.xaml.dll!cxcpdispatcher::tick() line 1120    c++ windows.ui.xaml.dll!cjupitercontrol::handlewindowmessage(unsigned int umsg, unsigned int wparam, long lparam) line 249  c++ windows.ui.xaml.dll!cjupiterwindow::windowproc(hwnd__ * hwnd, unsigned int umsg, unsigned int wparam, long lparam) line 354 c++ windows.ui.xaml.dll!cjupiterwindow::staticwindowproc(hwnd__ * hwnd, unsigned int umsg, unsigned int wparam, long lparam) line 208   c++ user32.dll!_internalcallwinproc@20()    unknown user32.dll!_usercallwinproccheckwow@36()    unknown user32.dll!_dispatchclientmessage@24()  unknown user32.dll!___fndword@4()   unknown ntdll.dll!_kiusercallbackdispatcher@12()    unknown windows.ui.dll!windows::ui::core::cdispatcher::processmessage(int bdrainqueue, int * pbanymessages) line 110    c++ windows.ui.dll!windows::ui::core::cdispatcher::processevents(windows::ui::core::coreprocesseventsoption options) line 184   c++ windows.ui.xaml.dll!cjupiterwindow::runcorewindowmessageloop() line 416 c++ windows.ui.xaml.dll!cjupitercontrol::runmessageloop() line 714  c++ windows.ui.xaml.dll!directui::dxamlcore::runmessageloop() line 2538 c++ windows.ui.xaml.dll!directui::frameworkview::run() line 91  c++ twinapi.dll!`windows::applicationmodel::core::coreapplicationviewagilecontainer::runtimeclassinitialize'::`55'::<lambda_a2234ba2ccd64e2c>::operator()(void * pv) line 560   c++ twinapi.dll!`windows::applicationmodel::core::coreapplicationviewagilecontainer::runtimeclassinitialize'::`55'::<lambda_a2234ba2ccd64e2c>::<helper_func>(void * pv) line 613    c++ shcore.dll!_shwaitforthreadwithwakemask@12()    unknown kernel32.dll!@basethreadinitthunk@12()  unknown ntdll.dll!___rtluserthreadstart@8() unknown ntdll.dll!__rtluserthreadstart@8()  unknown 

the thing can think of somewhere should manually marshalling call ui thread coredispather.invoke, i'm @ loss where.

if msft-y has source , wants @ file that's causing issue, debugger pointing me towards d:\win8_gdr\windows\dxaml\xcp\core\core\elements\uielement.cpp, not on system.

any appreciated.

i seem have found answer, taken settingsflyout example (but not popup example).

the settingsflyout example has add

parentpopup.closed += onpopupclosed; window.current.activated += onwindowactivated; 

to popup, methods being

private void onwindowactivated(object sender, windows.ui.core.windowactivatedeventargs e)     {         if (e.windowactivationstate == windows.ui.core.corewindowactivationstate.deactivated)         {             parentpopup.isopen = false;         }     }  void onpopupclosed(object sender, object e)     {         window.current.activated -= onwindowactivated;     } 

this seems have fixed crashes. haven't been able repro no matter how vigorously attack show flyout button.


Comments

Popular posts from this blog

c# - DetailsView in ASP.Net - How to add another column on the side/add a control in each row? -

javascript - firefox memory leak -

Trying to import CSV file to a SQL Server database using asp.net and c# - can't find what I'm missing -