Jump to content
Software FX Community

Null pointer exception in chart constructor


User (Legacy)

Recommended Posts

This happens when I'm starting my application.  It is quite persistent.  I'm

running 6.2 with the latest patches.

I used to see this in 6.0 but patches fixed it. Now I see it again in 6.2.

Any thoughts?

chartfx.dll!SoftwareFX.ChartFX.DataArray.get_Item(int index = 5) + 0xf bytes

chartfx.dll!SoftwareFX.ChartFX.1O.BeginLoop() + 0x4b2 bytes

chartfx.dll!SoftwareFX.ChartFX.0V.GX(SoftwareFX.ChartFX.1O 1V4 =

{SoftwareFX.ChartFX.1O}, bool 1V5 = true, int 1V6 = 160, int 1V7 = 245,

System.Drawing.Point 1V8 = {X=160 Y=245}, System.Object 1V9 = <undefined

value>) + 0x192 bytes

chartfx.dll!SoftwareFX.ChartFX.0V.GY(int 1VA = 160, int 1VB =

245, System.Object 1VC = <undefined value>) + 0x39f bytes

chartfx.dll!SoftwareFX.ChartFX.0V.4B(System.Drawing.Point 1UF =

{X=160 Y=245}, string 1UG = null) + 0x6b bytes

chartfx.dll!SoftwareFX.ChartFX.J.5B(System.Object 15M =

{SoftwareFX.ChartFX.I}, System.EventArgs 15N = {System.EventArgs}) + 0x78

bytes

system.windows.forms.dll!System.Windows.Forms.Timer.OnTick(System.EventArgs

e = {System.EventArgs}) + 0x1f bytes

system.windows.forms.dll!System.Windows.Forms.Timer.DebuggableCallback(int

hWnd = 0, int msg = 275, int idEvent = 14652, int dwTime = 773173546) + 0x2d

bytes

system.windows.forms.dll!System.Windows.Forms.Timer.set_Enabled(bool value =

false) + 0x1b9 bytes

system.windows.forms.dll!System.Windows.Forms.Timer.set_Interval(int value =

500) + 0xfe bytes

chartfx.dll!SoftwareFX.ChartFX.I.I(System.EventHandler handler =

{System.EventHandler}, int nextInterval = 500) + 0x2b bytes

chartfx.dll!SoftwareFX.ChartFX.J.J(System.Windows.Forms.Control

ctrl = {SoftwareFX.ChartFX.0V}) + 0xc6 bytes

chartfx.dll!SoftwareFX.ChartFX.0V.0V(SoftwareFX.ChartFX.Chart

chart = {SoftwareFX.ChartFX.Chart}) + 0x72 bytes

chartfx.dll!SoftwareFX.ChartFX.ChartWinForms.E0() + 0x53 bytes

chartfx.dll!SoftwareFX.ChartFX.ChartCore.DZ() + 0x1f4 bytes

chartfx.dll!SoftwareFX.ChartFX.Chart.Chart() + 0x95 bytes

Link to comment
Share on other sites

Hi, I can see where this could happen but I not fully understand how you

created this scenario.

This is the story, we create a timer to handle our tooltips, this timer is

created when the chart is created. In our current code we enable the timer

as soon as it is created (I am checking as this does not seem to be needed).

Now according to your stack, We create and enable the timer, and the timer

gets fired when the chart is not ready (I am guessing your form is not

visible and you have not passed data to the chart), the strange thing is

that if AFAIK this timer should not be firing as your thread is still busy

processing the Form constructor, InitializeComponent, etc.

We will attack this issue from 2 fronts

a) Trying not to enable the timer until needed

B) Guarding our function so that it does not crash even if called when the

chart is not "ready"

I tried a couple of ways to duplicate your issue (so that we can make sure

option b works), e.g. Adding a sleep to my test form's constructor, setting

my app to be multithreaded, etc. with no success. When the timer fires the

chart is ready to handle the event. I even tried in both single-processor

and dual-processor machines.

Can you send us an exe that reproduces this issue (hopefully it will not

need a complex database configuration or work on confidential data). This

would help us understand this scenario and make sure we really fix this

issue.

--

Regards,

JC

Software FX Support

"Matt C." <matt@serviceintegrity.com> wrote in message

news:5irwK4TKEHA.600@webserver3.softwarefx.com...

> This happens when I'm starting my application. It is quite persistent.

I'm

> running 6.2 with the latest patches.

> I used to see this in 6.0 but patches fixed it. Now I see it again in

6.2.

> Any thoughts?

>

> chartfx.dll!SoftwareFX.ChartFX.DataArray.get_Item(int index = 5) + 0xf

bytes

> chartfx.dll!SoftwareFX.ChartFX.1O.BeginLoop() + 0x4b2 bytes

>

> chartfx.dll!SoftwareFX.ChartFX.0V.GX(SoftwareFX.ChartFX.1O 1V4

=

> {SoftwareFX.ChartFX.1O}, bool 1V5 = true, int 1V6 = 160, int 1V7 = 245,

> System.Drawing.Point 1V8 = {X=160 Y=245}, System.Object 1V9 = <undefined

> value>) + 0x192 bytes

>

> chartfx.dll!SoftwareFX.ChartFX.0V.GY(int 1VA = 160, int 1VB =

> 245, System.Object 1VC = <undefined value>) + 0x39f bytes

>

> chartfx.dll!SoftwareFX.ChartFX.0V.4B(System.Drawing.Point 1UF

=

> {X=160 Y=245}, string 1UG = null) + 0x6b bytes

>

> chartfx.dll!SoftwareFX.ChartFX.J.5B(System.Object 15M =

> {SoftwareFX.ChartFX.I}, System.EventArgs 15N = {System.EventArgs}) + 0x78

> bytes

>

>

>

system.windows.forms.dll!System.Windows.Forms.Timer.OnTick(System.EventArgs

> e = {System.EventArgs}) + 0x1f bytes

>

>

> system.windows.forms.dll!System.Windows.Forms.Timer.DebuggableCallback(int

> hWnd = 0, int msg = 275, int idEvent = 14652, int dwTime = 773173546) +

0x2d

> bytes

>

>

> system.windows.forms.dll!System.Windows.Forms.Timer.set_Enabled(bool value

=

> false) + 0x1b9 bytes

>

>

> system.windows.forms.dll!System.Windows.Forms.Timer.set_Interval(int value

=

> 500) + 0xfe bytes

>

> chartfx.dll!SoftwareFX.ChartFX.I.I(System.EventHandler handler

=

> {System.EventHandler}, int nextInterval = 500) + 0x2b bytes

>

>

chartfx.dll!SoftwareFX.ChartFX.J.J(System.Windows.Forms.Control

> ctrl = {SoftwareFX.ChartFX.0V}) + 0xc6 bytes

>

> chartfx.dll!SoftwareFX.ChartFX.0V.0V(SoftwareFX.ChartFX.Chart

> chart = {SoftwareFX.ChartFX.Chart}) + 0x72 bytes

>

> chartfx.dll!SoftwareFX.ChartFX.ChartWinForms.E0() + 0x53 bytes

>

> chartfx.dll!SoftwareFX.ChartFX.ChartCore.DZ() + 0x1f4 bytes

>

> chartfx.dll!SoftwareFX.ChartFX.Chart.Chart() + 0x95 bytes

>

>

Link to comment
Share on other sites

I forgot to mention, if you can, please send the exe (and any required

assemblies) to support@softwarefx.online.com (removing the online domain)

--

Regards,

JC

Software FX Support

"Matt C." <matt@serviceintegrity.com> wrote in message

news:5irwK4TKEHA.600@webserver3.softwarefx.com...

> This happens when I'm starting my application. It is quite persistent.

I'm

> running 6.2 with the latest patches.

> I used to see this in 6.0 but patches fixed it. Now I see it again in

6.2.

> Any thoughts?

>

> chartfx.dll!SoftwareFX.ChartFX.DataArray.get_Item(int index = 5) + 0xf

bytes

> chartfx.dll!SoftwareFX.ChartFX.1O.BeginLoop() + 0x4b2 bytes

>

> chartfx.dll!SoftwareFX.ChartFX.0V.GX(SoftwareFX.ChartFX.1O 1V4

=

> {SoftwareFX.ChartFX.1O}, bool 1V5 = true, int 1V6 = 160, int 1V7 = 245,

> System.Drawing.Point 1V8 = {X=160 Y=245}, System.Object 1V9 = <undefined

> value>) + 0x192 bytes

>

> chartfx.dll!SoftwareFX.ChartFX.0V.GY(int 1VA = 160, int 1VB =

> 245, System.Object 1VC = <undefined value>) + 0x39f bytes

>

> chartfx.dll!SoftwareFX.ChartFX.0V.4B(System.Drawing.Point 1UF

=

> {X=160 Y=245}, string 1UG = null) + 0x6b bytes

>

> chartfx.dll!SoftwareFX.ChartFX.J.5B(System.Object 15M =

> {SoftwareFX.ChartFX.I}, System.EventArgs 15N = {System.EventArgs}) + 0x78

> bytes

>

>

>

system.windows.forms.dll!System.Windows.Forms.Timer.OnTick(System.EventArgs

> e = {System.EventArgs}) + 0x1f bytes

>

>

> system.windows.forms.dll!System.Windows.Forms.Timer.DebuggableCallback(int

> hWnd = 0, int msg = 275, int idEvent = 14652, int dwTime = 773173546) +

0x2d

> bytes

>

>

> system.windows.forms.dll!System.Windows.Forms.Timer.set_Enabled(bool value

=

> false) + 0x1b9 bytes

>

>

> system.windows.forms.dll!System.Windows.Forms.Timer.set_Interval(int value

=

> 500) + 0xfe bytes

>

> chartfx.dll!SoftwareFX.ChartFX.I.I(System.EventHandler handler

=

> {System.EventHandler}, int nextInterval = 500) + 0x2b bytes

>

>

chartfx.dll!SoftwareFX.ChartFX.J.J(System.Windows.Forms.Control

> ctrl = {SoftwareFX.ChartFX.0V}) + 0xc6 bytes

>

> chartfx.dll!SoftwareFX.ChartFX.0V.0V(SoftwareFX.ChartFX.Chart

> chart = {SoftwareFX.ChartFX.Chart}) + 0x72 bytes

>

> chartfx.dll!SoftwareFX.ChartFX.ChartWinForms.E0() + 0x53 bytes

>

> chartfx.dll!SoftwareFX.ChartFX.ChartCore.DZ() + 0x1f4 bytes

>

> chartfx.dll!SoftwareFX.ChartFX.Chart.Chart() + 0x95 bytes

>

>

Link to comment
Share on other sites

Sorry,  our app is very complex and it would take days to get it to you and

get you up and running with it.

I too cannot reproduce this problem in a simple isolated application. I can

tell you that we have the charts

on panels and that they are in dockable windows using DevComponents

DotNetBar control. On top of this

we have several charts. Some are hidden, some are not. I can tell you

that this problem happens right away

when we start the app, not after running successfully. We update the charts

from background threads, etc...

but that process doesn't even start until all the charts are constructed.

If there is anything I can do from here to help you weed out the problem let

me know. I'd be happy to load your

symbols and debug it from here if you need me to.

"SoftwareFX Support" <noreply@softwarefx.com> wrote in message

news:6O9sF7UKEHA.600@webserver3.softwarefx.com...

> Hi, I can see where this could happen but I not fully understand how you

> created this scenario.

>

> This is the story, we create a timer to handle our tooltips, this timer is

> created when the chart is created. In our current code we enable the timer

> as soon as it is created (I am checking as this does not seem to be

needed).

> Now according to your stack, We create and enable the timer, and the timer

> gets fired when the chart is not ready (I am guessing your form is not

> visible and you have not passed data to the chart), the strange thing is

> that if AFAIK this timer should not be firing as your thread is still busy

> processing the Form constructor, InitializeComponent, etc.

>

> We will attack this issue from 2 fronts

>

> a) Trying not to enable the timer until needed

> B) Guarding our function so that it does not crash even if called when the

> chart is not "ready"

>

> I tried a couple of ways to duplicate your issue (so that we can make sure

> option b works), e.g. Adding a sleep to my test form's constructor,

setting

> my app to be multithreaded, etc. with no success. When the timer fires the

> chart is ready to handle the event. I even tried in both single-processor

> and dual-processor machines.

>

> Can you send us an exe that reproduces this issue (hopefully it will not

> need a complex database configuration or work on confidential data). This

> would help us understand this scenario and make sure we really fix this

> issue.

>

> --

> Regards,

>

> JC

> Software FX Support

> "Matt C." <matt@serviceintegrity.com> wrote in message

> news:5irwK4TKEHA.600@webserver3.softwarefx.com...

> > This happens when I'm starting my application. It is quite persistent.

> I'm

> > running 6.2 with the latest patches.

> > I used to see this in 6.0 but patches fixed it. Now I see it again in

> 6.2.

> > Any thoughts?

> >

> > chartfx.dll!SoftwareFX.ChartFX.DataArray.get_Item(int index = 5) + 0xf

> bytes

> > chartfx.dll!SoftwareFX.ChartFX.1O.BeginLoop() + 0x4b2 bytes

> >

> > chartfx.dll!SoftwareFX.ChartFX.0V.GX(SoftwareFX.ChartFX.1O

1V4

> =

> > {SoftwareFX.ChartFX.1O}, bool 1V5 = true, int 1V6 = 160, int 1V7 = 245,

> > System.Drawing.Point 1V8 = {X=160 Y=245}, System.Object 1V9 = <undefined

> > value>) + 0x192 bytes

> >

> > chartfx.dll!SoftwareFX.ChartFX.0V.GY(int 1VA = 160, int 1VB

=

> > 245, System.Object 1VC = <undefined value>) + 0x39f bytes

> >

> > chartfx.dll!SoftwareFX.ChartFX.0V.4B(System.Drawing.Point

1UF

> =

> > {X=160 Y=245}, string 1UG = null) + 0x6b bytes

> >

> > chartfx.dll!SoftwareFX.ChartFX.J.5B(System.Object 15M =

> > {SoftwareFX.ChartFX.I}, System.EventArgs 15N = {System.EventArgs}) +

0x78

> > bytes

> >

> >

> >

>

system.windows.forms.dll!System.Windows.Forms.Timer.OnTick(System.EventArgs

> > e = {System.EventArgs}) + 0x1f bytes

> >

> >

> >

system.windows.forms.dll!System.Windows.Forms.Timer.DebuggableCallback(int

> > hWnd = 0, int msg = 275, int idEvent = 14652, int dwTime = 773173546) +

> 0x2d

> > bytes

> >

> >

> > system.windows.forms.dll!System.Windows.Forms.Timer.set_Enabled(bool

value

> =

> > false) + 0x1b9 bytes

> >

> >

> > system.windows.forms.dll!System.Windows.Forms.Timer.set_Interval(int

value

> =

> > 500) + 0xfe bytes

> >

> > chartfx.dll!SoftwareFX.ChartFX.I.I(System.EventHandler

handler

> =

> > {System.EventHandler}, int nextInterval = 500) + 0x2b bytes

> >

> >

> chartfx.dll!SoftwareFX.ChartFX.J.J(System.Windows.Forms.Control

> > ctrl = {SoftwareFX.ChartFX.0V}) + 0xc6 bytes

> >

> >

chartfx.dll!SoftwareFX.ChartFX.0V.0V(SoftwareFX.ChartFX.Chart

> > chart = {SoftwareFX.ChartFX.Chart}) + 0x72 bytes

> >

> > chartfx.dll!SoftwareFX.ChartFX.ChartWinForms.E0() + 0x53

bytes

> >

> > chartfx.dll!SoftwareFX.ChartFX.ChartCore.DZ() + 0x1f4 bytes

> >

> > chartfx.dll!SoftwareFX.ChartFX.Chart.Chart() + 0x95 bytes

> >

> >

>

>

SoftFx.doc

Link to comment
Share on other sites

Are you creating the chart on the UI thread ? If you are not, this could

explain the fact that we are creating the timer and it is firing right away.

ChartFX as any other Windows Form Control should only be created/manipulated

on the main (UI) thread, if you have a lengthy process, you should invoke it

in a worker thread and then modify the chart in the UI thread. You can use

Control.Invoke to make sure you execute the chart manipulation in the UI

thread.

As I said in my first post, we will be fixing our code as it is not

necessary to enable the timer in the constructor but if you are manipulating

the chart from multiple threads you may find other concurrency issues in the

near future.

--

Regards,

JC

Software FX Support

"Matt C." <matt@serviceintegrity.com> wrote in message

news:9U0rfRSLEHA.600@webserver3.softwarefx.com...

> Sorry, our app is very complex and it would take days to get it to you

and

> get you up and running with it.

> I too cannot reproduce this problem in a simple isolated application. I

can

> tell you that we have the charts

> on panels and that they are in dockable windows using DevComponents

> DotNetBar control. On top of this

> we have several charts. Some are hidden, some are not. I can tell you

> that this problem happens right away

> when we start the app, not after running successfully. We update the

charts

> from background threads, etc...

> but that process doesn't even start until all the charts are constructed.

>

> If there is anything I can do from here to help you weed out the problem

let

> me know. I'd be happy to load your

> symbols and debug it from here if you need me to.

>

>

> "SoftwareFX Support" <noreply@softwarefx.com> wrote in message

> news:6O9sF7UKEHA.600@webserver3.softwarefx.com...

> > Hi, I can see where this could happen but I not fully understand how you

> > created this scenario.

> >

> > This is the story, we create a timer to handle our tooltips, this timer

is

> > created when the chart is created. In our current code we enable the

timer

> > as soon as it is created (I am checking as this does not seem to be

> needed).

> > Now according to your stack, We create and enable the timer, and the

timer

> > gets fired when the chart is not ready (I am guessing your form is not

> > visible and you have not passed data to the chart), the strange thing is

> > that if AFAIK this timer should not be firing as your thread is still

busy

> > processing the Form constructor, InitializeComponent, etc.

> >

> > We will attack this issue from 2 fronts

> >

> > a) Trying not to enable the timer until needed

> > B) Guarding our function so that it does not crash even if called when

the

> > chart is not "ready"

> >

> > I tried a couple of ways to duplicate your issue (so that we can make

sure

> > option b works), e.g. Adding a sleep to my test form's constructor,

> setting

> > my app to be multithreaded, etc. with no success. When the timer fires

the

> > chart is ready to handle the event. I even tried in both

single-processor

> > and dual-processor machines.

> >

> > Can you send us an exe that reproduces this issue (hopefully it will not

> > need a complex database configuration or work on confidential data).

This

> > would help us understand this scenario and make sure we really fix this

> > issue.

> >

> > --

> > Regards,

> >

> > JC

> > Software FX Support

> > "Matt C." <matt@serviceintegrity.com> wrote in message

> > news:5irwK4TKEHA.600@webserver3.softwarefx.com...

> > > This happens when I'm starting my application. It is quite

persistent.

> > I'm

> > > running 6.2 with the latest patches.

> > > I used to see this in 6.0 but patches fixed it. Now I see it again in

> > 6.2.

> > > Any thoughts?

> > >

> > > chartfx.dll!SoftwareFX.ChartFX.DataArray.get_Item(int index = 5) + 0xf

> > bytes

> > > chartfx.dll!SoftwareFX.ChartFX.1O.BeginLoop() + 0x4b2

bytes

> > >

> > > chartfx.dll!SoftwareFX.ChartFX.0V.GX(SoftwareFX.ChartFX.1O

> 1V4

> > =

> > > {SoftwareFX.ChartFX.1O}, bool 1V5 = true, int 1V6 = 160, int 1V7 =

245,

> > > System.Drawing.Point 1V8 = {X=160 Y=245}, System.Object 1V9 =

<undefined

> > > value>) + 0x192 bytes

> > >

> > > chartfx.dll!SoftwareFX.ChartFX.0V.GY(int 1VA = 160, int

1VB

> =

> > > 245, System.Object 1VC = <undefined value>) + 0x39f bytes

> > >

> > > chartfx.dll!SoftwareFX.ChartFX.0V.4B(System.Drawing.Point

> 1UF

> > =

> > > {X=160 Y=245}, string 1UG = null) + 0x6b bytes

> > >

> > > chartfx.dll!SoftwareFX.ChartFX.J.5B(System.Object 15M =

> > > {SoftwareFX.ChartFX.I}, System.EventArgs 15N = {System.EventArgs}) +

> 0x78

> > > bytes

> > >

> > >

> > >

> >

>

system.windows.forms.dll!System.Windows.Forms.Timer.OnTick(System.EventArgs

> > > e = {System.EventArgs}) + 0x1f bytes

> > >

> > >

> > >

> system.windows.forms.dll!System.Windows.Forms.Timer.DebuggableCallback(int

> > > hWnd = 0, int msg = 275, int idEvent = 14652, int dwTime = 773173546)

+

> > 0x2d

> > > bytes

> > >

> > >

> > > system.windows.forms.dll!System.Windows.Forms.Timer.set_Enabled(bool

> value

> > =

> > > false) + 0x1b9 bytes

> > >

> > >

> > > system.windows.forms.dll!System.Windows.Forms.Timer.set_Interval(int

> value

> > =

> > > 500) + 0xfe bytes

> > >

> > > chartfx.dll!SoftwareFX.ChartFX.I.I(System.EventHandler

> handler

> > =

> > > {System.EventHandler}, int nextInterval = 500) + 0x2b bytes

> > >

> > >

> > chartfx.dll!SoftwareFX.ChartFX.J.J(System.Windows.Forms.Control

> > > ctrl = {SoftwareFX.ChartFX.0V}) + 0xc6 bytes

> > >

> > >

> chartfx.dll!SoftwareFX.ChartFX.0V.0V(SoftwareFX.ChartFX.Chart

> > > chart = {SoftwareFX.ChartFX.Chart}) + 0x72 bytes

> > >

> > > chartfx.dll!SoftwareFX.ChartFX.ChartWinForms.E0() + 0x53

> bytes

> > >

> > > chartfx.dll!SoftwareFX.ChartFX.ChartCore.DZ() + 0x1f4

bytes

> > >

> > > chartfx.dll!SoftwareFX.ChartFX.Chart.Chart() + 0x95 bytes

> > >

> > >

> >

> >

>

>

Link to comment
Share on other sites

Yes of course...  And the threads that update the data poke the UI thread to

do the actual updates too.

"SoftwareFX Support" <noreply@softwarefx.com> wrote in message

news:%236uEWKULEHA.2900@webserver3.softwarefx.com...

> Are you creating the chart on the UI thread ? If you are not, this could

> explain the fact that we are creating the timer and it is firing right

away.

>

> ChartFX as any other Windows Form Control should only be

created/manipulated

> on the main (UI) thread, if you have a lengthy process, you should invoke

it

> in a worker thread and then modify the chart in the UI thread. You can use

> Control.Invoke to make sure you execute the chart manipulation in the UI

> thread.

>

> As I said in my first post, we will be fixing our code as it is not

> necessary to enable the timer in the constructor but if you are

manipulating

> the chart from multiple threads you may find other concurrency issues in

the

> near future.

>

> --

> Regards,

>

> JC

> Software FX Support

> "Matt C." <matt@serviceintegrity.com> wrote in message

> news:9U0rfRSLEHA.600@webserver3.softwarefx.com...

> > Sorry, our app is very complex and it would take days to get it to you

> and

> > get you up and running with it.

> > I too cannot reproduce this problem in a simple isolated application. I

> can

> > tell you that we have the charts

> > on panels and that they are in dockable windows using DevComponents

> > DotNetBar control. On top of this

> > we have several charts. Some are hidden, some are not. I can tell you

> > that this problem happens right away

> > when we start the app, not after running successfully. We update the

> charts

> > from background threads, etc...

> > but that process doesn't even start until all the charts are

constructed.

> >

> > If there is anything I can do from here to help you weed out the problem

> let

> > me know. I'd be happy to load your

> > symbols and debug it from here if you need me to.

> >

> >

> > "SoftwareFX Support" <noreply@softwarefx.com> wrote in message

> > news:6O9sF7UKEHA.600@webserver3.softwarefx.com...

> > > Hi, I can see where this could happen but I not fully understand how

you

> > > created this scenario.

> > >

> > > This is the story, we create a timer to handle our tooltips, this

timer

> is

> > > created when the chart is created. In our current code we enable the

> timer

> > > as soon as it is created (I am checking as this does not seem to be

> > needed).

> > > Now according to your stack, We create and enable the timer, and the

> timer

> > > gets fired when the chart is not ready (I am guessing your form is not

> > > visible and you have not passed data to the chart), the strange thing

is

> > > that if AFAIK this timer should not be firing as your thread is still

> busy

> > > processing the Form constructor, InitializeComponent, etc.

> > >

> > > We will attack this issue from 2 fronts

> > >

> > > a) Trying not to enable the timer until needed

> > > B) Guarding our function so that it does not crash even if called when

> the

> > > chart is not "ready"

> > >

> > > I tried a couple of ways to duplicate your issue (so that we can make

> sure

> > > option b works), e.g. Adding a sleep to my test form's constructor,

> > setting

> > > my app to be multithreaded, etc. with no success. When the timer fires

> the

> > > chart is ready to handle the event. I even tried in both

> single-processor

> > > and dual-processor machines.

> > >

> > > Can you send us an exe that reproduces this issue (hopefully it will

not

> > > need a complex database configuration or work on confidential data).

> This

> > > would help us understand this scenario and make sure we really fix

this

> > > issue.

> > >

> > > --

> > > Regards,

> > >

> > > JC

> > > Software FX Support

> > > "Matt C." <matt@serviceintegrity.com> wrote in message

> > > news:5irwK4TKEHA.600@webserver3.softwarefx.com...

> > > > This happens when I'm starting my application. It is quite

> persistent.

> > > I'm

> > > > running 6.2 with the latest patches.

> > > > I used to see this in 6.0 but patches fixed it. Now I see it again

in

> > > 6.2.

> > > > Any thoughts?

> > > >

> > > > chartfx.dll!SoftwareFX.ChartFX.DataArray.get_Item(int index = 5) +

0xf

> > > bytes

> > > > chartfx.dll!SoftwareFX.ChartFX.1O.BeginLoop() + 0x4b2

> bytes

> > > >

> > > >

chartfx.dll!SoftwareFX.ChartFX.0V.GX(SoftwareFX.ChartFX.1O

> > 1V4

> > > =

> > > > {SoftwareFX.ChartFX.1O}, bool 1V5 = true, int 1V6 = 160, int 1V7 =

> 245,

> > > > System.Drawing.Point 1V8 = {X=160 Y=245}, System.Object 1V9 =

> <undefined

> > > > value>) + 0x192 bytes

> > > >

> > > > chartfx.dll!SoftwareFX.ChartFX.0V.GY(int 1VA = 160, int

> 1VB

> > =

> > > > 245, System.Object 1VC = <undefined value>) + 0x39f bytes

> > > >

> > > >

chartfx.dll!SoftwareFX.ChartFX.0V.4B(System.Drawing.Point

> > 1UF

> > > =

> > > > {X=160 Y=245}, string 1UG = null) + 0x6b bytes

> > > >

> > > > chartfx.dll!SoftwareFX.ChartFX.J.5B(System.Object 15M =

> > > > {SoftwareFX.ChartFX.I}, System.EventArgs 15N = {System.EventArgs}) +

> > 0x78

> > > > bytes

> > > >

> > > >

> > > >

> > >

> >

>

system.windows.forms.dll!System.Windows.Forms.Timer.OnTick(System.EventArgs

> > > > e = {System.EventArgs}) + 0x1f bytes

> > > >

> > > >

> > > >

> >

system.windows.forms.dll!System.Windows.Forms.Timer.DebuggableCallback(int

> > > > hWnd = 0, int msg = 275, int idEvent = 14652, int dwTime =

773173546)

> +

> > > 0x2d

> > > > bytes

> > > >

> > > >

> > > > system.windows.forms.dll!System.Windows.Forms.Timer.set_Enabled(bool

> > value

> > > =

> > > > false) + 0x1b9 bytes

> > > >

> > > >

> > > > system.windows.forms.dll!System.Windows.Forms.Timer.set_Interval(int

> > value

> > > =

> > > > 500) + 0xfe bytes

> > > >

> > > > chartfx.dll!SoftwareFX.ChartFX.I.I(System.EventHandler

> > handler

> > > =

> > > > {System.EventHandler}, int nextInterval = 500) + 0x2b bytes

> > > >

> > > >

> > > chartfx.dll!SoftwareFX.ChartFX.J.J(System.Windows.Forms.Control

> > > > ctrl = {SoftwareFX.ChartFX.0V}) + 0xc6 bytes

> > > >

> > > >

> > chartfx.dll!SoftwareFX.ChartFX.0V.0V(SoftwareFX.ChartFX.Chart

> > > > chart = {SoftwareFX.ChartFX.Chart}) + 0x72 bytes

> > > >

> > > > chartfx.dll!SoftwareFX.ChartFX.ChartWinForms.E0() + 0x53

> > bytes

> > > >

> > > > chartfx.dll!SoftwareFX.ChartFX.ChartCore.DZ() + 0x1f4

> bytes

> > > >

> > > > chartfx.dll!SoftwareFX.ChartFX.Chart.Chart() + 0x95

bytes

> > > >

> > > >

> > >

> > >

> >

> >

>

>

Link to comment
Share on other sites

We just uploaded a new hotfix to our support site. In this hotfix we are

delaying enabling the timer until it is actually required. Is it very

difficult for us to also add code to the routine that is generating the

exception because in the code path there seems to be enough checks to make

sure the chart actually has data so we are afraid this is happening because

of threading issues.

To download the hotfix please send an email to support at softwarefx , if

the problem persists after the hotfix I would recommend to make sure that

your "chart" code is actually being executed in the UI thread. If you can

somehow sketch how you interact with the charts (how you create them, when

do you pass the data, etc.) we may be able to duplicate this issue.

--

Regards,

JC

Software FX Support

"Matt C." <matt@serviceintegrity.com> wrote in message

news:DRg$o21MEHA.600@webserver3.softwarefx.com...

> Yes of course... And the threads that update the data poke the UI thread

to

> do the actual updates too.

>

>

> "SoftwareFX Support" <noreply@softwarefx.com> wrote in message

> news:%236uEWKULEHA.2900@webserver3.softwarefx.com...

> > Are you creating the chart on the UI thread ? If you are not, this could

> > explain the fact that we are creating the timer and it is firing right

> away.

> >

> > ChartFX as any other Windows Form Control should only be

> created/manipulated

> > on the main (UI) thread, if you have a lengthy process, you should

invoke

> it

> > in a worker thread and then modify the chart in the UI thread. You can

use

> > Control.Invoke to make sure you execute the chart manipulation in the UI

> > thread.

> >

> > As I said in my first post, we will be fixing our code as it is not

> > necessary to enable the timer in the constructor but if you are

> manipulating

> > the chart from multiple threads you may find other concurrency issues in

> the

> > near future.

> >

> > --

> > Regards,

> >

> > JC

> > Software FX Support

> > "Matt C." <matt@serviceintegrity.com> wrote in message

> > news:9U0rfRSLEHA.600@webserver3.softwarefx.com...

> > > Sorry, our app is very complex and it would take days to get it to

you

> > and

> > > get you up and running with it.

> > > I too cannot reproduce this problem in a simple isolated application.

I

> > can

> > > tell you that we have the charts

> > > on panels and that they are in dockable windows using DevComponents

> > > DotNetBar control. On top of this

> > > we have several charts. Some are hidden, some are not. I can tell

you

> > > that this problem happens right away

> > > when we start the app, not after running successfully. We update the

> > charts

> > > from background threads, etc...

> > > but that process doesn't even start until all the charts are

> constructed.

> > >

> > > If there is anything I can do from here to help you weed out the

problem

> > let

> > > me know. I'd be happy to load your

> > > symbols and debug it from here if you need me to.

> > >

> > >

> > > "SoftwareFX Support" <noreply@softwarefx.com> wrote in message

> > > news:6O9sF7UKEHA.600@webserver3.softwarefx.com...

> > > > Hi, I can see where this could happen but I not fully understand how

> you

> > > > created this scenario.

> > > >

> > > > This is the story, we create a timer to handle our tooltips, this

> timer

> > is

> > > > created when the chart is created. In our current code we enable the

> > timer

> > > > as soon as it is created (I am checking as this does not seem to be

> > > needed).

> > > > Now according to your stack, We create and enable the timer, and the

> > timer

> > > > gets fired when the chart is not ready (I am guessing your form is

not

> > > > visible and you have not passed data to the chart), the strange

thing

> is

> > > > that if AFAIK this timer should not be firing as your thread is

still

> > busy

> > > > processing the Form constructor, InitializeComponent, etc.

> > > >

> > > > We will attack this issue from 2 fronts

> > > >

> > > > a) Trying not to enable the timer until needed

> > > > B) Guarding our function so that it does not crash even if called

when

> > the

> > > > chart is not "ready"

> > > >

> > > > I tried a couple of ways to duplicate your issue (so that we can

make

> > sure

> > > > option b works), e.g. Adding a sleep to my test form's constructor,

> > > setting

> > > > my app to be multithreaded, etc. with no success. When the timer

fires

> > the

> > > > chart is ready to handle the event. I even tried in both

> > single-processor

> > > > and dual-processor machines.

> > > >

> > > > Can you send us an exe that reproduces this issue (hopefully it will

> not

> > > > need a complex database configuration or work on confidential data).

> > This

> > > > would help us understand this scenario and make sure we really fix

> this

> > > > issue.

> > > >

> > > > --

> > > > Regards,

> > > >

> > > > JC

> > > > Software FX Support

> > > > "Matt C." <matt@serviceintegrity.com> wrote in message

> > > > news:5irwK4TKEHA.600@webserver3.softwarefx.com...

> > > > > This happens when I'm starting my application. It is quite

> > persistent.

> > > > I'm

> > > > > running 6.2 with the latest patches.

> > > > > I used to see this in 6.0 but patches fixed it. Now I see it

again

> in

> > > > 6.2.

> > > > > Any thoughts?

> > > > >

> > > > > chartfx.dll!SoftwareFX.ChartFX.DataArray.get_Item(int index = 5) +

> 0xf

> > > > bytes

> > > > > chartfx.dll!SoftwareFX.ChartFX.1O.BeginLoop() + 0x4b2

> > bytes

> > > > >

> > > > >

> chartfx.dll!SoftwareFX.ChartFX.0V.GX(SoftwareFX.ChartFX.1O

> > > 1V4

> > > > =

> > > > > {SoftwareFX.ChartFX.1O}, bool 1V5 = true, int 1V6 = 160, int 1V7 =

> > 245,

> > > > > System.Drawing.Point 1V8 = {X=160 Y=245}, System.Object 1V9 =

> > <undefined

> > > > > value>) + 0x192 bytes

> > > > >

> > > > > chartfx.dll!SoftwareFX.ChartFX.0V.GY(int 1VA = 160,

int

> > 1VB

> > > =

> > > > > 245, System.Object 1VC = <undefined value>) + 0x39f bytes

> > > > >

> > > > >

> chartfx.dll!SoftwareFX.ChartFX.0V.4B(System.Drawing.Point

> > > 1UF

> > > > =

> > > > > {X=160 Y=245}, string 1UG = null) + 0x6b bytes

> > > > >

> > > > > chartfx.dll!SoftwareFX.ChartFX.J.5B(System.Object 15M

=

> > > > > {SoftwareFX.ChartFX.I}, System.EventArgs 15N = {System.EventArgs})

+

> > > 0x78

> > > > > bytes

> > > > >

> > > > >

> > > > >

> > > >

> > >

> >

>

system.windows.forms.dll!System.Windows.Forms.Timer.OnTick(System.EventArgs

> > > > > e = {System.EventArgs}) + 0x1f bytes

> > > > >

> > > > >

> > > > >

> > >

> system.windows.forms.dll!System.Windows.Forms.Timer.DebuggableCallback(int

> > > > > hWnd = 0, int msg = 275, int idEvent = 14652, int dwTime =

> 773173546)

> > +

> > > > 0x2d

> > > > > bytes

> > > > >

> > > > >

> > > > >

system.windows.forms.dll!System.Windows.Forms.Timer.set_Enabled(bool

> > > value

> > > > =

> > > > > false) + 0x1b9 bytes

> > > > >

> > > > >

> > > > >

system.windows.forms.dll!System.Windows.Forms.Timer.set_Interval(int

> > > value

> > > > =

> > > > > 500) + 0xfe bytes

> > > > >

> > > > > chartfx.dll!SoftwareFX.ChartFX.I.I(System.EventHandler

> > > handler

> > > > =

> > > > > {System.EventHandler}, int nextInterval = 500) + 0x2b bytes

> > > > >

> > > > >

> > > > chartfx.dll!SoftwareFX.ChartFX.J.J(System.Windows.Forms.Control

> > > > > ctrl = {SoftwareFX.ChartFX.0V}) + 0xc6 bytes

> > > > >

> > > > >

> > > chartfx.dll!SoftwareFX.ChartFX.0V.0V(SoftwareFX.ChartFX.Chart

> > > > > chart = {SoftwareFX.ChartFX.Chart}) + 0x72 bytes

> > > > >

> > > > > chartfx.dll!SoftwareFX.ChartFX.ChartWinForms.E0() +

0x53

> > > bytes

> > > > >

> > > > > chartfx.dll!SoftwareFX.ChartFX.ChartCore.DZ() + 0x1f4

> > bytes

> > > > >

> > > > > chartfx.dll!SoftwareFX.ChartFX.Chart.Chart() + 0x95

> bytes

> > > > >

> > > > >

> > > >

> > > >

> > >

> > >

> >

> >

>

>

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...