View Issue Details

IDProjectCategoryView StatusLast Update
0003901NoesisGUIUnitypublic2025-06-02 12:20
ReporterKeldorKatarn Assigned Tosfernandez  
PrioritynormalSeveritycrash 
Status resolvedResolutionfixed 
Product Version3.2.6 
Target Version3.2.8Fixed in Version3.2.8 
Summary0003901: Noesis causes a crash when capturing DependencyPropertyChangedEventArgs in a closure
Description

When trying to capture DependencyPropertyChangedEventArgs in a closure as seen below, it causes a Unity crash:

static void ModelChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (View.InDesignMode || object.ReferenceEquals(e.NewValue, e.OldValue))
{
return;
}

var fe = d as FrameworkElement;
if (fe == null)
{
    return;
}

    // This is just API causing the delegate to be executed on fe's Loaded event
View.ExecuteOnLoad(fe, delegate
{
    var target = e.NewValue; // <============== Crash happens here

    d.SetValue(View.IsScopeRootProperty, true);

    var context = string.IsNullOrEmpty(fe.Name)
                      ? fe.GetHashCode().ToString()
                      : fe.Name;

    ViewModelBinder.Bind(target, d, context);
});

}

Steps To Reproduce

See description

PlatformWindows

Relationships

related to 0001992 assignedsfernandez Unity 2019.4.9f1 (64-bit) crashes when using asynchronous event handler for Noesis RoutedEvent 

Activities

sfernandez

sfernandez

2025-01-15 10:14

manager   ~0010270

In Noesis args are only valir during the lifetime of the event handler call. In order to perform any async operation that uses event arg members you'll have to copy them into variables:

static void ModelChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
...
object newValue = e.NewValue;
View.ExecuteOnLoad(fe, delegate
{
var target = newValue;

    d.SetValue(View.IsScopeRootProperty, true);

    var context = string.IsNullOrEmpty(fe.Name)
                      ? fe.GetHashCode().ToString()
                      : fe.Name;

    ViewModelBinder.Bind(target, d, context);
});

}

Could you please try that?

KeldorKatarn

KeldorKatarn

2025-01-15 13:38

reporter   ~0010271

That works yes. It's still a bit problematic that this causes a crash

sfernandez

sfernandez

2025-06-02 12:20

manager   ~0010765

We are still not able to keep the DependencyPropertyChangedEventArgs alive if captured in an async method, but it is not crashing anymore as accessing its methods will return null values.

Issue History

Date Modified Username Field Change
2025-01-14 22:42 KeldorKatarn New Issue
2025-01-14 22:44 KeldorKatarn Description Updated
2025-01-14 22:44 KeldorKatarn Description Updated
2025-01-15 09:35 sfernandez Assigned To => sfernandez
2025-01-15 09:35 sfernandez Status new => assigned
2025-01-15 09:35 sfernandez Target Version => 3.2.7
2025-01-15 09:35 sfernandez Relationship added related to 0001992
2025-01-15 10:14 sfernandez Status assigned => feedback
2025-01-15 10:14 sfernandez Note Added: 0010270
2025-01-15 13:38 KeldorKatarn Note Added: 0010271
2025-01-15 13:38 KeldorKatarn Status feedback => assigned
2025-01-20 17:42 jsantos Target Version 3.2.7 => 3.2.8
2025-06-02 12:20 sfernandez Status assigned => resolved
2025-06-02 12:20 sfernandez Resolution open => fixed
2025-06-02 12:20 sfernandez Fixed in Version => 3.2.8
2025-06-02 12:20 sfernandez Note Added: 0010765
2025-10-10 13:29 jsantos Category Unity3D => Unity