Member 11709930 Ответов: 1

Значок printdialog автоматической отмены (таймаут)


Привет
Я хочу, чтобы printdialog автоматически отменял себя, если DialogResult не возвращается, скажем, в течение 60 секунд.

Что я уже пробовал:

Я использую этот кусочек кода, чтобы запустить его. Наверное, мне нужен способ ввести таймер, чтобы отменить pdi, но я заблудился.
using (PrintDialog pdi = new PrintDialog())
{
   if (pdi.ShowDialog(this) == DialogResult.Cancel)
   {
      return;
   }

   printPages();
}

1 Ответов

Рейтинг:
1

Gerry Schmitz

private void button1_Click( object sender, EventArgs e ) {

   Timer timer = new Timer() {
      Interval = 10000
   };

   timer.Tick += Timer_Tick;
   timer.Start();

   try {
      using ( PrintDialog pdi = new PrintDialog() ) {
         if ( pdi.ShowDialog( this ) == DialogResult.Cancel ) {
            return;
         }
         MessageBox.Show( "Printing" );
      }
   } finally {
      timer.Stop();
      timer.Dispose();
   }
}

private void Timer_Tick( object sender, EventArgs e ) {
   SendKeys.Send( "{ESC}" );
}


Member 11709930

Спасибо, Джерри, это отличное начало и заставило меня двигаться дальше.
К сожалению, SendKeys не будет работать для меня, так как нет никакой гарантии, что активное окно будет, когда таймер истечет. Кроме того, там будет несколько дочерних окон, открытых через PrintDialog.
Я думаю, что мне нужен способ найти HWND для диалога и его детей, а затем ударить их с помощью user32.dll DestroyWindow