summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
0505296)
When we load cached image, `ResourceLoaded` signal invoked immediate.
So, `ResourceLoaded` can be called during `UpdateImage(object, EventArgs)`.
But since we make null after invoke + C# didn't invoke event during invoking.
That mean, attached `UpdateImage()` information disapeared.
So we need to allow `UpdateImage()` event invoke during `ProcessorOnceEvent` invoking.
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
internal ProcessorController(global::System.IntPtr cPtr, bool cMemoryOwn) : base(cPtr, cMemoryOwn)
{
internal ProcessorController(global::System.IntPtr cPtr, bool cMemoryOwn) : base(cPtr, cMemoryOwn)
{
+ onceEventIndex = 0u;
+ internalProcessorOnceEvent = new EventHandler[2];
+ internalProcessorOnceEvent[0] = null;
+ internalProcessorOnceEvent[1] = null;
+
processorCallback = new ProcessorEventHandler(Process);
Interop.ProcessorController.SetCallback(SwigCPtr, processorCallback);
}
processorCallback = new ProcessorEventHandler(Process);
Interop.ProcessorController.SetCallback(SwigCPtr, processorCallback);
}
private ProcessorEventHandler processorCallback = null;
private ProcessorEventHandler processorCallback = null;
- public event EventHandler ProcessorOnceEvent;
+ private uint onceEventIndex;
+ // Double buffered once event processing
+ private EventHandler[] internalProcessorOnceEvent;
+
+ public event EventHandler ProcessorOnceEvent
+ {
+ add
+ {
+ internalProcessorOnceEvent[onceEventIndex] += value;
+ }
+ remove
+ {
+ internalProcessorOnceEvent[onceEventIndex] -= value;
+ }
+ }
public event EventHandler ProcessorEvent;
public event EventHandler LayoutProcessorEvent;
public event EventHandler ProcessorEvent;
public event EventHandler LayoutProcessorEvent;
- ProcessorOnceEvent?.Invoke(this, null);
- ProcessorOnceEvent = null;
+ // Let us add once event into 1 index during 0 event invoke
+ onceEventIndex = 1;
+ internalProcessorOnceEvent[0]?.Invoke(this, null);
+ internalProcessorOnceEvent[0] = null;
+
ProcessorEvent?.Invoke(this, null);
LayoutProcessorEvent?.Invoke(this, null);
ProcessorEvent?.Invoke(this, null);
LayoutProcessorEvent?.Invoke(this, null);
- // To avoid ImageView's properties mismatched problem,
- // We need to invoke events now which attached during LayoutProcessor.
- ProcessorOnceEvent?.Invoke(this, null);
- ProcessorOnceEvent = null;
+ // Let us add once event into 0 index during 1 event invoke
+ // Note : To avoid ImageView's properties mismatched problem,
+ // We need to invoke events now which attached during internalProcessorOnceEvent[0] and LayoutProcessor.
+ onceEventIndex = 0;
+ internalProcessorOnceEvent[1]?.Invoke(this, null);
+ internalProcessorOnceEvent[1] = null;
protected override void Dispose(DisposeTypes type)
{
Interop.ProcessorController.RemoveCallback(SwigCPtr, processorCallback);
protected override void Dispose(DisposeTypes type)
{
Interop.ProcessorController.RemoveCallback(SwigCPtr, processorCallback);
- ProcessorOnceEvent = null;
+ internalProcessorOnceEvent[0] = null;
+ internalProcessorOnceEvent[1] = null;
ProcessorEvent = null;
LayoutProcessorEvent = null;
GC.SuppressFinalize(this);
ProcessorEvent = null;
LayoutProcessorEvent = null;
GC.SuppressFinalize(this);
/// </summary>
private void UpdateImage(object source, EventArgs e)
{
/// </summary>
private void UpdateImage(object source, EventArgs e)
{
+ // Note : To allow event attachment during UpdateImage, let we make flag as false before call UpdateImage().
imagePropertyUpdateProcessAttachedFlag = false;
imagePropertyUpdateProcessAttachedFlag = false;