sachinj Posted September 11, 2008 Report Share Posted September 11, 2008 Hi, <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> I am using ChartFX 7.0. I am getting a crash when calling the render control method of the chart [Chart1.RenderControl(MyHtmlWriter);]. The chart is created dynamically. The crash does not happens always. It happens only occasionally. When the chart works without crashing I get a license WARNING at the bottom of the chart. But the chart gets displayed. I am running the charts in the different threads to make several charts run in parallel. Please let me know why it is crashing the chart. I am able to replicate a workflow in our application where the crash always happens. It seems like something is not initialized properly inside the ChartFX libraries which gives me the crash. Thanks. Sachin Here is the error that I am receiving: Object reference not set to an instance of an object. at ChartFX.WebForms.Internal.b.a(OutputText A_0, Exception A_1, IServerControl A_2) at ChartFX.WebForms.Chart.a(Stream A_0, IOutputWriter A_1, OutputText A_2, OutputText A_3, OutputInfo A_4) at ChartFX.WebForms.Chart.a(OutputText A_0, OutputText A_1, Boolean A_2, String A_3, String A_4) at ChartFX.WebForms.Chart.Render(HtmlTextWriter writer) at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) at System.Web.UI.Control.RenderControl(HtmlTextWriter writer) Here is the sample source code that I am using: using System; using System.Threading; using System.IO; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebApplication1 { public partial class TestPage : System.Web.UI.Page { string m_Chart = "";protected void Page_Load(object sender, EventArgs e) { string chartResponse = "";Thread WorkerThread = new Thread(new ThreadStart(GetNewChart)); WorkerThread.Start(); Thread.Sleep(10000); Response.Write(m_Chart); } public ChartFX.WebForms.Chart GetNewChart(ref string data) {ChartFX.WebForms.Chart Chart1 = new ChartFX.WebForms.Chart(); Chart1.ID = "C" + System.Guid.NewGuid().ToString();Chart1.LegendBox.Visible = false; Chart1.Gallery = ChartFX.WebForms. Gallery.Bar;Chart1.AxisX.Title.Text = "Date";Chart1.AxisX.Visible = true; Chart1.AxisX.LabelAngle = 0; Chart1.ToolTips = true;Chart1.Titles.Add(new ChartFX.WebForms.TitleDockable("Workcenter Utilization by Date")); Chart1.AxisY.Title.Text = "Utilization (%)";Chart1.AxisY.LabelsFormat.Format = ChartFX.WebForms.AxisFormat.Percentage; Chart1.AllSeries.PointLabels.Format = "%v";Chart1.Visible = true; Chart1.Data.Series = 27; Random rnd = new Random(12);for (int i = 1; i < 27; i++) { for (int col = 1; col < 31; col++) { if (col == 1) {Chart1.Series[i - 1].Text = "Legend" + i.ToString(); } Chart1.Data[i - 1, col - 1] = rnd.Next() * 20; } } for (int i = 1; i < 31; i++) {Chart1.AxisX.Labels[i - 1] = "08/22/08"; } Chart1.Height = 375; Chart1.Width = 600;System.IO.StringWriter MyTextWriter = new System.IO.StringWriter(); System.Web.UI. HtmlTextWriter MyHtmlWriter = new System.Web.UI.HtmlTextWriter(MyTextWriter); Chart1.RenderControl(MyHtmlWriter); //THE CRASH OCCURS ON THIS LINE OF CODE MyHtmlWriter.Close(); string MyHtml = MyTextWriter.GetStringBuilder().ToString(); data = MyHtml; return Chart1; } public void GetNewChart() {GetNewChart(ref m_Chart); } } } Attached is the warning message related to the license that I receive when chart runs without crashing: Quote Link to comment Share on other sites More sharing options...
Frank Posted September 11, 2008 Report Share Posted September 11, 2008 There are two issues here: 1) Your license is temporary. When you installed Chart FX you had the option of: a) Connecting to the internet and obtaining a license Get a challenge code and e-mail it to us to get a license c) Bypass temporarily. Seems that you chose option c) but you never obtained a valid license. You need to re-install and obtain a valid license. 2) You are rendering the chart in the PageLoad and that is not correct. What you need to do is to create the chart in the override of CreateChildControls and add it to the Controls collection of your page (instead of calling RenderControl), this way it will enter as part of your control tree, viewstate, etc. and will be rendered at the appropriate time in the page cycle. Quote Link to comment Share on other sites More sharing options...
sachinj Posted September 13, 2008 Author Report Share Posted September 13, 2008 Frank, I copied the code from our application in this format where the chart is generated in the Page Load method. I changed the sample code to create the chart in the CreateChildControls function. But the crash happened in that code as well. I don't think the problem is related to Page Life Cylce. Another thing I noticed is that this code runs without crashing if I use the VS 2008 built in webserver. This code crashes on the chart render line only when I use IIS with VS 2008 or if I deploy this in IIS. One more thing I found is that it works fine if I call the GetNewChart() functions directly in the Page Load method. So the crash happens if I create the chart in a new threads and run it under IIS. I think the ChartFX libraries tries to access something for which it doesn't have pemission under IIS? Can you tell me how get rendering information of chart in difrerent thread running in IIS? Thanks. Sachin Quote Link to comment Share on other sites More sharing options...
sachinj Posted September 13, 2008 Author Report Share Posted September 13, 2008 I have attached a sample application that you can use to easily replicate the poblem. Quote Link to comment Share on other sites More sharing options...
sachinj Posted September 17, 2008 Author Report Share Posted September 17, 2008 Hi, This issue happens with the 7.0 version of ChartFX librraries. It works fine without crashing when I try to use the older 6.2 version. Can anyone form SoftwareFX help me resolve this issue? Thanks. Sachin Quote Link to comment Share on other sites More sharing options...
Frank Posted September 17, 2008 Report Share Posted September 17, 2008 This is your code: protected override void CreateChildControls() { //GetNewChart(ref m_Chart); //This Function call runs wihout error under IIS//Response.Write(m_Chart);//The following function call works well with Visual Studio 2008 in built web server but crashes with IISThread WorkerThread = new Thread(new ThreadStart(GetNewChart)); //When this function is executed under IIS it crashes on the Chart1.RenderControl(MyHtmlWriter) functionWorkerThread.Start();Thread.Sleep(10000); Response.Write(m_Chart); } You can not create the chart in a separate thread and you don't write to the Respose stream during a CreateChildControls call.In the CreateChildControls you must do: m_chart = new Chart(); // Configure chart .... m_someDiv.Controls.Add(m_chart); // This adds it to the control tree and it will be rendered along with other elements I don't understand what you are trying to do with this thread. The page cycle is synchronous. Attached, please find an example application that dynamically creates a chart correctly. Quote Link to comment Share on other sites More sharing options...
sachinj Posted September 17, 2008 Author Report Share Posted September 17, 2008 Hi Frank, We were using ChartFX 6.2 in our application which is quite huge and complicated. Recently, we purchased the licenses for the newer version 7.0. When I tried using the charts in our application I got the crash message that I posted. In our application we are creating a number of threads to generate different charts. This used to work fine with version 6.2 but suddenly started crashing with version 7.0. The sample code I posted is my attempt to replicate the problem. It is not exactly how we are doing it in our application. However, the thing that is identical is creating a new thread and calling the renderControl method from IIS. In our UI we are creating a number of charts dynamically and each one is rendered in a different thread which gives me the crash. What you are implying hat the functionality that we used to have, to be able to render the charts in a different thread is no longer availble in the version 7.0. This would lead us to downgrade our application back to version 6.2. Let me know if this a correct assumption. Thanks. Sachin Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.