2014-12-07 2 views
-1

Я был сделан для печати отчета на C#. Но я нашел ошибку. Для первого запуска печати обычно. Но во второй раз моя программа немедленно прекращена.Ошибка Crystal Reports во второй печати

ошибка окно что-то вроде этого:

столкнулся с проблемой и необходимо закрыть. мы приносим свои извинения за причиненные неудобства

Код:

ReportDocument rptDocument = new ReportDocument(); 
PrinterSettings settings = new PrinterSettings(); 

public void cetak() { 
    rptDocument.Load(Application.StartupPath + "/report/fakturpenjualan.rpt"); 
    rptDocument.SetParameterValue("idpenjualan", idp); 

    rptDocument.PrintOptions.PrinterName = settings.PrinterName; 

    rptDocument.PrintToPrinter(1, true, 0, 0); 
    rptDocument.Close(); 
} 

Что я должен делать?

+0

Не используйте повторно объект 'ReportDocument'. После того, как вы закончите использовать его, вызовите 'Dispose' (еще лучше, оберните его в блок' using'), а затем создайте новый для следующего отчета. – vesan

ответ

-1

Обязательно и УТИЛИЗИРУЙТЕ объект после его закрытия и принудительного сбора мусора. У механизма выполнения есть проблемы, если объект отчета не полностью уничтожен.

+0

_Which_ объект? Зачем предлагать «принудить сбор мусора»? –

+0

Джон, ты настоящая работа. Такие люди, как вы, не так лучше. Вы явно ничего не знаете о процессоре Crystal .Net, и у вас нет ответов на опрос. Это ИЗВЕСТНЫЙ ФАКТ, что сбор мусора должен быть вызван в объект отчета после его удаления, потому что он не очищается достаточно быстро, в противном случае. –

+0

Если это «известный факт», то сообщите об этом здесь пользователям [so]. Покажите, о чем вы говорите. Поделитесь знаниями. Ссылка на документацию, в которой обсуждается этот «известный факт». –