2016-11-20 5 views
0

나는 WinForms을 사용하고 있습니다. 내 양식에는 디렉토리의 모든 tif 이미지를 인쇄하는 버튼이 있습니다. 인쇄 작업이 취소되거나 인쇄가 완료되면 내 응용 프로그램에 이미지를 릴리스하라고 말하고 싶습니다. 나는 FileInfo가 아마 여기의 문제라고 생각한다. 이 작업을 어떻게 수행 할 수 있습니까?응용 프로그램이 그것을 사용하여 완료되면 파일을 해제하십시오

List<string> DocPathList = new List<string>(); 
    private int page; 

    private void btn_Print_Click(object sender, EventArgs e) 
    { 
     DirectoryInfo SourceDirectory = new DirectoryInfo(@"C:\image\Shared_Directory\Printing_Folder\"); 
     FileInfo[] Files = SourceDirectory.GetFiles("*.tif"); //Getting Tif files 


     foreach (FileInfo file in Files) 
     { 
      DocPathList.Add(SourceDirectory + file.Name); 
     } 

     printPreviewDialog1.Document = printDocument1; 
     printPreviewDialog1.Show(); 
    } 

    private void printDocument1_PrintPage(object sender, PrintPageEventArgs e) 
    { 
      e.Graphics.DrawImage(Image.FromFile(DocPathList[page]), e.MarginBounds); 
      page++; 
      e.HasMorePages = page < DocPathList.Count; 
    } 

    private void printDocument1_BeginPrint(object sender, PrintEventArgs e) 
    { 
     page = 0; 
    } 

이 코드 줄을 추가하면 이미지가 해제됩니다. 버튼을 한 번 클릭하면 작동합니다. 내가 인쇄 버튼을 누릅니다 경우, 두 번째 printPreviewDialog1.Show(); 오류 발생 : 난 내 인쇄를 취소하고 다음 파일로 이동하는 경우 예를 들어

Exception thrown: 'System.ObjectDisposedException' in System.Windows.Forms.dll

 using (var image = Image.FromFile(DocPathList[page])) 
     { 
      e.Graphics.DrawImage(image, e.MarginBounds); 
      page++; 
      e.HasMorePages = page < DocPathList.Count; 
     } 

를,이 파일을 수정/삭제/이름을 탐험 나는 아래의 오류. 현재 tif 문서를 수정할 수있는 응용 프로그램을 닫아야합니다.

enter image description here

답변

1

, 당신은 당신이 당신의 편집에 설명 된 것처럼 Image.FromFile() 것이다 keep a lock on the file until the image is disposed 때문에, 당신의 imageusing 블록에 포장해야합니다.

ObjectDisposedException은 이미지로드와 관련이없는 printPreviewDialog에서 왔습니다. 당신은 ... 중 하나를 할 수

(A) 대신 대화 모달을 보여 printPreviewDialog1.ShowDialog(this)를 사용 (즉, 대화 상자가 열려있는 동안 부모 창으로 블록 입력)

그것을 닫은 후 대화 상자를 폐기하지 않을 것이다,

또는, (b)는 지금처럼, 비 모달 대화 상자를 보여 printPreviewDialog.Show(this)를 사용하지만, 다음 콜백 추가 :

private void printPreviewDialog1_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     // Don't close and dispose the form if the user is just dismissing it. Hide instead. 
     if (e.CloseReason == CloseReason.UserClosing) 
     { 
      e.Cancel = true; 
      printPreviewDialog1.Hide(); 
     } 
    } 
내가 명확하지 수
0

EndPrint Event에 가입하고이 파일을 삭제 하시겠습니까? 문서에서

: 어떤 경우에

EndPrint event also occurs if the printing process is canceled or an exception occurs during the printing process.

+0

, 그냥 응용 프로그램을 말하고 싶어 내가 돈을 더 이상이 문서를 사용하고 싶지 않습니다. 따라서이 Windows 오류가 아닙니다. 파일이 다른 응용 프로그램에서 열려 있기 때문에 작업을 완료 할 수 없습니다. – taji01