本帖最后由 Richard.Ma 于 2020-7-28 12:23 编辑
c1Report1.Render()是一个异步方法。问题的原因在于执行c1Report1.Render()方法时,c1Report1已经被占用了,
此时如果再去重复调用c1Report1.Render(),就会报错
解决的办法是设置一个bool标志比如下面代码中的isrendering ,通过EndReport事件判断是否已经完成渲染
- private void textBox1_TextChanged_1(object sender, EventArgs e)
- {
- string WYSText = textBox1.Text;
- string WYGText = textBox1.Text;
- DataTable ty = GetDataTable(WYSText, WYGText);
- c1Report1.Load(@"C:\Carestream\RISGC\UserTemplates\ProductsReport2.xml", "report2"); // preview the document
- this.c1Report1.DataSource.Recordset = ty;
- if (!isrendering)
- {
- //这里在渲染前将isrendering设置为true,防止重复调用
- isrendering = true;
- this.c1Report1.Render();
-
- //Thread.Sleep(5000);
- int page = c1Report1.GetPageCount();
-
- }
- label1.Text = WYSText.ToString();
- //c1PrintPreviewControl1.Document = c1Report1.Document;
- }
- bool isrendering = false;
- private void c1Report1_EndReport(object sender, EventArgs e)
- {
- isrendering = false;
- }
复制代码
|