Проблема с печатью, а затем удалить документ - PullRequest
0 голосов
/ 01 марта 2019

У меня есть много изображений JPG, которые мне нужно распечатать, а затем удалить их.Метод печати такой:

 public void PrintJPG()
    {

       PrintDocument pd = new PrintDocument();            
       for (int i = 0; i < this.PathsJPG.Length; i++)
       {
          currentpath = getCurrentPath(i);
          pd.PrintPage += PrintPage;
          pd.Print();                
       }               

    }

    public static void PrintPage(object o, PrintPageEventArgs e)
    {
        System.Drawing.Image i = System.Drawing.Image.FromFile(currentpath);
        Rectangle m = e.MarginBounds;

        if ((double)i.Width / (double)i.Height > (double)m.Width / (double)m.Height) // 
        {
            m.Height = (int)((double)i.Height / (double)i.Width * (double)m.Width);
        }
        else
        {
            m.Width = (int)((double)i.Width / (double)i.Height * (double)m.Height);
        }
        e.Graphics.DrawImage(i, m);
    }

Метод удаления такой:

public void DeleteGenerateDoc()
    {
        FileInfo file; 
        foreach( string path in JpgPath)
        {
            file = new FileInfo(path);
            file.Delete();
        }            
    }

А главное это:

static void Main(string[] args)
    {
        string[] PathJPG = array with path of the jpg files  // here is a function that return a array of jpg paths

        PrintJPG();          

        DeleteGenerateDoc();
    }

Проблема в том, что я должендождитесь завершения печати и затем удалите документ.Что я должен добавить в свой код для программы, чтобы дождаться окончания печати и затем удалить файл jpg?

1 Ответ

0 голосов
/ 01 марта 2019

Я думаю, что метод PrintDocument.Print () только отправляет документ в очередь принтера.Он не ждет, пока он на самом деле напечатает.

Но вы можете использовать событие PrintDocument.EndPrint , чтобы получать уведомления о печати страницы.Вы можете использовать уведомление, чтобы удалить каждый файл после его печати.Это было мое раннее предложение.

Однако, если ваша программа только выполняет эту задачу, а затем завершает работу, она все равно не будет работать.В этом случае вам нужно остановить выполнение, пока оно не будет сделано.Это немного сложнее, но должно быть возможно при использовании CountdownEvent .

В вашем случае это может выглядеть примерно так:

PrintDocument pd = new PrintDocument();
CountdownEvent countdown = new CountdownEvent(this.PathsJPG.Length);
for (int i = 0; i < this.PathsJPG.Length; i++) {
    currentpath = getCurrentPath(i);
    pd.PrintPage += PrintPage;
    pd.EndPrint += (o,e) => { countdown.Signal(); }
    pd.Print();
}
countdown.Wait();

Последняя строка должназаблокируйте вашу программу, пока все страницы не будут напечатаны.После этого вы сможете удалить файлы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...