Announcement

Collapse

Looking for a User App or Add-On built by the NinjaTrader community?

Visit NinjaTrader EcoSystem and our free User App Share!

Have a question for the NinjaScript developer community? Open a new thread in our NinjaScript File Sharing Discussion Forum!
See more
See less

Partner 728x90

Collapse

How would I resolve thread owning issue in OnBarUpdate?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    How would I resolve thread owning issue in OnBarUpdate?

    I'm newer to the UI things and would like the buttons to change color based on a trade direction, but I'm stuck on a thread issue where it cannot access the buttonsArray because a different thread owns it. I tried CurrentDispatcher.Invoke without any success. Any other ideas to get this to work?

    Code:
            protected override void OnBarUpdate()
            {
                if (buttonsArray == null)
                    return;
    
                if (Global.SelectedTradeDirection == Global.Direction.LONG)
                {
                    System.Windows.Threading.Dispatcher.CurrentDispatcher.Invoke(() =>
                    {
                        buttonsArray[SHORT_BUTTON].Background = new SolidColorBrush(Colors.Transparent);
                    });
    
                    ForceRefresh();
                }
                else if (Global.SelectedTradeDirection == Global.Direction.SHORT)
                {
                    System.Windows.Threading.Dispatcher.CurrentDispatcher.Invoke(() =>
                    {
                        buttonsArray[LONG_BUTTON].Background = new SolidColorBrush(Colors.Transparent);
                    });
    
                    ForceRefresh();
                }
                else
                {
                    System.Windows.Threading.Dispatcher.CurrentDispatcher.Invoke(() =>
                    {
                        buttonsArray[LONG_BUTTON].Background = new SolidColorBrush(Colors.Transparent);
                        buttonsArray[SHORT_BUTTON].Background = new SolidColorBrush(Colors.Transparent);
                    });
    
                    ForceRefresh();
                }
            }​

    #2
    I resolved it.

    Code:
    protected override void OnBarUpdate()
            {
                if (buttonsArray == null)
                    return;
    
                if (buttonsArray[LONG_BUTTON] == null || buttonsArray[SHORT_BUTTON] == null)
                    return;
    
                if (Global.SelectedTradeDirection == Global.Direction.LONG)
                {
                    if (buttonsArray[SHORT_BUTTON].Dispatcher.CheckAccess())
                    {
                        ResetShortButton();
                    }
                    else
                    {
                        this.Dispatcher.InvokeAsync(new Action(() =>
                        {
                            ResetShortButton();
                        }));
                    }
    
                    ForceRefresh();
                }
                else if (Global.SelectedTradeDirection == Global.Direction.SHORT)
                {
                    if (buttonsArray[LONG_BUTTON].Dispatcher.CheckAccess())
                    {
                        ResetLongButton();
                    }
                    else
                    {
                        this.Dispatcher.InvokeAsync(new Action(() =>
                        {
                            ResetLongButton();
                        }));
                    }
    
                    ForceRefresh();
                }
                else
                {
                    if (buttonsArray[SHORT_BUTTON].Dispatcher.CheckAccess())
                    {
                        ResetLongButton();
                        ResetShortButton();
                    }
                    else
                    {
                        this.Dispatcher.InvokeAsync(new Action(() =>
                        {
                            ResetLongButton();
                        }));
    
                        this.Dispatcher.InvokeAsync(new Action(() =>
                        {
                            ResetShortButton();
                        }));
                    }
    
                    ForceRefresh();
                }
            }​
    Last edited by tonystarks; 11-11-2022, 08:24 AM.

    Comment

    Latest Posts

    Collapse

    Topics Statistics Last Post
    Started by andrewtrades, Today, 04:57 PM
    1 response
    9 views
    0 likes
    Last Post NinjaTrader_Manfred  
    Started by chbruno, Today, 04:10 PM
    0 responses
    6 views
    0 likes
    Last Post chbruno
    by chbruno
     
    Started by josh18955, 03-25-2023, 11:16 AM
    6 responses
    436 views
    0 likes
    Last Post Delerium  
    Started by FAQtrader, Today, 03:35 PM
    0 responses
    8 views
    0 likes
    Last Post FAQtrader  
    Started by rocketman7, Today, 09:41 AM
    5 responses
    19 views
    0 likes
    Last Post NinjaTrader_Jesse  
    Working...
    X