คือ เวลารันโค้ด มันช้ามาก อาจจะเป็นเพราะมันต้องมีการ Random ด้วยครับ
อยากจะนำ task มาใช้ เช่น รันข้อมูลแต่ละหน้าพร้อมกัน เมื่อครบทุกหน้าก็ค่อย ปริ้น แบบนี้ครับ
อาจจะไม่ต้องใช้ PrintDocument ใช้ tool อื่นก็ได้ ครับ ขอแค่เร็วขึ้นก็พอ ครับ
// เนื้อาแต่ละหน้าประมาณนี้ครับ
โค้ดครับ
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้namespace TestMath_TOR.Classed
{
public class PrintAddDif
{
#region Variables
private PrintDocument _printDocument = new PrintDocument();
private string _ReportHeader,_ReportFooter;
bool _bLandscape;
private Font fontHeader = new Font("cordia new", 28, FontStyle.Bold);
private Font fontDetail = new Font("cordia new", 48);
System.Drawing.StringFormat strFormat; //Used to format the grid rows.
int CountPage = 1; int Max; int Min;
#endregion
public PrintAddDif(string ReportHeader,string ReportFooter, int _min = 1, int _max = 10, int pCount = 1)
{
Min = _min; Max = _max; CountPage = pCount;
_printDocument.PrintPage += new PrintPageEventHandler(printDocument_PrintPage);
_printDocument.BeginPrint += new PrintEventHandler(printDocument_BeginPrint);
_ReportHeader = ReportHeader;
_ReportFooter = ReportFooter;
_bLandscape = false;
}
public void PrintForm()
{
System.Windows.Forms.PrintDialog printDialog = new System.Windows.Forms.PrintDialog();
printDialog.Document = _printDocument;
printDialog.UseEXDialog = true;
//Get the document
if (System.Windows.Forms.DialogResult.OK == printDialog.ShowDialog())
{
_printDocument.DefaultPageSettings.Landscape = _bLandscape;
_printDocument.DocumentName = "แบบฝึกหัด" + string.Format("{0:yyyyMMdd hhmmss}", DateTime.Now);
_printDocument.Print();
}
}
#region Begin Print Event Handler
private void printDocument_BeginPrint(object sender, PrintEventArgs e)
{
strFormat = new System.Drawing.StringFormat();
strFormat.Alignment = System.Drawing.StringAlignment.Near;
strFormat.LineAlignment = System.Drawing.StringAlignment.Center;
strFormat.Trimming = System.Drawing.StringTrimming.EllipsisCharacter;
bFirstPage = true;
bNewPage = true;
}
#endregion
int lnxFinal;
int lnxStart_1 = 200;
int IntYStart_1 = 200;
bool bFirstPage = false, bNewPage = false;
int iCount = 1;
private void printDocumentNewPage(object sender, PrintPageEventArgs e)
{
lnxFinal = e.MarginBounds.Right + 60;
string a, b;
SizeF size;
int lineH = 2;
//Draw Table
// List<Task> tasks = new List<Task>);
for (int i = 1; i < 5;i++)
{
/* tasks.Add(Task.Run(() =>
{*/
int y = IntYStart_1 * i;
if (y < 1000)
{
// int y = IntYStart_1 * i;
IntNumber i_n = RandomNumber.NextIntNumber(Min, Max);
a = string.Join(" ",i_n.Max.ToString().ToArray());
System.Threading.Thread.Sleep(1000);
b = string.Join(" ", i_n.Min.ToString().ToArray());
size = e.Graphics.MeasureString(a.ToString(), fontDetail);
e.Graphics.DrawString(a.ToString(), fontDetail, Brushes.Black, (lnxStart_1 + 150 - size.Width), y- (int)(size.Height/1.5));//size.Height
e.Graphics.DrawLine(new Pen(Color.Black, lineH), new Point(lnxStart_1,y ), new Point(lnxStart_1 + 150, y));
e.Graphics.DrawString((RandomNumber.NextNumber(1,1000)>500)?"+":"-", fontHeader, Brushes.Black, lnxStart_1 + 155, y-25);
size = e.Graphics.MeasureString(b, fontDetail);
e.Graphics.DrawString(b, fontDetail, Brushes.Black, (lnxStart_1 + 150 - size.Width), y-26 );
i_n = RandomNumber.NextIntNumber(Min, Max);
System.Threading.Thread.Sleep(1000);
a = a = string.Join(" ", i_n.Max.ToString().ToArray());
System.Threading.Thread.Sleep(1000);
b = string.Join(" ", i_n.Min.ToString().ToArray());
size = e.Graphics.MeasureString(a.ToString(), fontDetail);
e.Graphics.DrawString(a.ToString(), fontDetail, Brushes.Black, (lnxStart_1 + 455 - size.Width) , y - (int)(size.Height/1.5));//size.Height
e.Graphics.DrawLine(new Pen(Color.Black, lineH), new Point(lnxStart_1+300, y), new Point(lnxStart_1 + 450, y));
e.Graphics.DrawString((RandomNumber.NextNumber(1, 1000) > 500) ? "+" : "-", fontHeader, Brushes.Black, lnxStart_1 + 455, y - 25);
size = e.Graphics.MeasureString(b, fontDetail);
e.Graphics.DrawString(b, fontDetail, Brushes.Black, (lnxStart_1 + 455 - size.Width), y-26 );
y = y+100;
e.Graphics.DrawLine(new Pen(Color.Black, lineH), new Point(lnxStart_1, y), new Point(lnxStart_1 + 150, y));
e.Graphics.DrawLine(new Pen(Color.Black, lineH), new Point(lnxStart_1 + 300, y), new Point(lnxStart_1 + 450, y));
y = y+10;
e.Graphics.DrawLine(new Pen(Color.Black, lineH), new Point(lnxStart_1, y), new Point(lnxStart_1 + 150, y));
e.Graphics.DrawLine(new Pen(Color.Black, lineH), new Point(lnxStart_1 + 300, y), new Point(lnxStart_1 + 450, y));
}
// }));
}
// Task.WaitAll(tasks.ToArray());
StringFormat sf = new StringFormat();
sf.LineAlignment = StringAlignment.Center;
sf.Alignment = StringAlignment.Center;
//Draw Header
size = e.Graphics.MeasureString(_ReportHeader, fontHeader);
e.Graphics.DrawString(_ReportHeader, fontHeader, Brushes.Black, (_printDocument.DefaultPageSettings.PaperSize.Width - size.Width) / 2, 10);
// e.Graphics.DrawString( _ReportHeader, fontHeader, Brushes.Black, 100, e.MarginBounds.Top - e.Graphics.MeasureString(_ReportHeader, fontHeader, e.MarginBounds.Width).Height - 13);
// String strDate = DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToShortTimeString();
//Draw Footer
// e.Graphics.DrawString(_ReportFooter, fontHeader, Brushes.Black, e.MarginBounds.Left + 100, e.MarginBounds.Bottom + 40);
size = e.Graphics.MeasureString(_ReportFooter, fontHeader);
e.Graphics.DrawString(_ReportFooter, fontHeader, Brushes.Black, (_printDocument.DefaultPageSettings.PaperSize.Width - size.Width) / 2, _printDocument.DefaultPageSettings.PaperSize.Height - 20);
bNewPage = false;
}
#region Print Page Event
private void printDocument_PrintPage(object sender, PrintPageEventArgs e)
{
//Loop till all the grid rows not get printed
if (bFirstPage) printDocumentNewPage(sender, e);
iCount++;
//If more lines exist, print another page.
e.HasMorePages = (iCount <=CountPage) ? true : false;
}
#endregion
}
}
c# Document PrintPage ใช้ร่วมกับ task ได้ยังไง ครับ
อยากจะนำ task มาใช้ เช่น รันข้อมูลแต่ละหน้าพร้อมกัน เมื่อครบทุกหน้าก็ค่อย ปริ้น แบบนี้ครับ
อาจจะไม่ต้องใช้ PrintDocument ใช้ tool อื่นก็ได้ ครับ ขอแค่เร็วขึ้นก็พอ ครับ
// เนื้อาแต่ละหน้าประมาณนี้ครับ
โค้ดครับ
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้