Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bazen yazdırma iletişim kutusunu açmadan yazdırma kuyruğuna yeni bir yazdırma işi eklemek isteyebilirsiniz. Bunu yapmak için yöntemlerden birini PrintQueue.AddJob kullanabilirsiniz. Nasıl yapıldığını burada bulabilirsiniz.
Aşağıdaki örnekte, AddJob(String, String, Boolean) yöntemini, AddJob
'in çeşitli aşırı yüklemelerinden biri olarak kullanarak:
- Xml Kağıt Belirtimi (XPS) belgesi için varsayılan yazdırma kuyruğuna yeni bir yazdırma işi ekleyin.
- Yeni işi adlandırın.
- XPS belgesinin doğrulanıp doğrulanmayacağını belirtin (parametresini
fastCopy
kullanarak).
yöntemi kullanılırken AddJob(String, String, Boolean)
parametresinin fastCopy
değeri önemli bir noktadır:
- parametresini
fastCopy
olaraktrue
ayarlarsanız, XPS doğrulaması atlanır ve yazdırma işi sayfa sayfa ilerleme geri bildirimi olmadan hızla biriktirilir. -
fastCopy
parametresinifalse
olarak ayarlarsanız,AddJob
yöntemini çağıran iş parçacığının tek iş parçacıklı daire durumu olması gerekir, aksi takdirde bir özel durum oluşturulacaktır. Daha fazla bilgi için için AddJob(String, String, Boolean) bölümüne bakın.
Kuyruğa yeni yazdırma işleri ekleme
Bu örnek, varsayılan kuyruğa bir veya daha fazla XPS belgesi ekler. Kod aşağıdakileri yapacaktır:
- UI iş parçacığını engellemekten kaçınmak için Task.Run kullanın, çünkü
AddJob
için zaman uyumsuz bir sürüm yoktur. - Eğer
fastCopy
parametre değerifalse
ise, AddJob(String, String, Boolean)'yi tek iş parçacıklı apartman durumuna sahip bir iş parçacığında çalıştırın. - Varsayılan PrintQueue öğesinin LocalPrintServer öğesine bir başvuru alın.
- Yazdırma kuyruğu başvurusunda, bir iş adı, bir XPS belge yolu ve
AddJob(String, String, Boolean)
parametresiylefastCopy
çağırın.
Kuyruk duraklatılmıyorsa ve yazıcı çalışıyorsa yazdırma işi yazdırma kuyruğunun en üstüne ulaştığında otomatik olarak yazdırmaya başlar.
Tavsiye
Varsayılan kuyruğa yazdırma işi eklerken Çıktı Dosyasını Farklı Kaydet iletişim kutusunun olmaması için, varsayılan yazıcınızın Microsoft XPS Belge Yazıcısı, Microsoft PDF'ye Yazdır veya diğer dosyaya yazdır seçenekleri olmadığından emin olun.
/// <summary>
/// Asyncronously, add a batch of XPS documents to the print queue using a PrintQueue.AddJob method.
/// Handle the thread apartment state required by the PrintQueue.AddJob method.
/// </summary>
/// <param name="xpsFilePaths">A collection of XPS documents.</param>
/// <param name="fastCopy">Whether to validate the XPS documents.</param>
/// <returns>Whether all documents were added to the print queue.</returns>
public static async Task<bool> BatchAddToPrintQueueAsync(IEnumerable<string> xpsFilePaths, bool fastCopy = false)
{
bool allAdded = true;
// Queue some work to run on the ThreadPool.
// Wait for completion without blocking the calling thread.
await Task.Run(() =>
{
if (fastCopy)
allAdded = BatchAddToPrintQueue(xpsFilePaths, fastCopy);
else
{
// Create a thread to call the PrintQueue.AddJob method.
Thread newThread = new(() =>
{
allAdded = BatchAddToPrintQueue(xpsFilePaths, fastCopy);
});
// Set the thread to single-threaded apartment state.
newThread.SetApartmentState(ApartmentState.STA);
// Start the thread.
newThread.Start();
// Wait for thread completion. Blocks the calling thread,
// which is a ThreadPool thread.
newThread.Join();
}
});
return allAdded;
}
/// <summary>
/// Add a batch of XPS documents to the print queue using a PrintQueue.AddJob method.
/// </summary>
/// <param name="xpsFilePaths">A collection of XPS documents.</param>
/// <param name="fastCopy">Whether to validate the XPS documents.</param>
/// <returns>Whether all documents were added to the print queue.</returns>
public static bool BatchAddToPrintQueue(IEnumerable<string> xpsFilePaths, bool fastCopy)
{
bool allAdded = true;
// To print without getting the "Save Output File As" dialog, ensure
// that your default printer is not the Microsoft XPS Document Writer,
// Microsoft Print to PDF, or other print-to-file option.
// Get a reference to the default print queue.
PrintQueue defaultPrintQueue = LocalPrintServer.GetDefaultPrintQueue();
// Iterate through the document collection.
foreach (string xpsFilePath in xpsFilePaths)
{
// Get document name.
string xpsFileName = Path.GetFileName(xpsFilePath);
try
{
// The AddJob method adds a new print job for an XPS
// document into the print queue, and assigns a job name.
// Use fastCopy to skip XPS validation and progress notifications.
// If fastCopy is false, the thread that calls PrintQueue.AddJob
// must have a single-threaded apartment state.
PrintSystemJobInfo xpsPrintJob =
defaultPrintQueue.AddJob(jobName: xpsFileName, documentPath: xpsFilePath, fastCopy);
// If the queue is not paused and the printer is working, then jobs will automatically begin printing.
Debug.WriteLine($"Added {xpsFileName} to the print queue.");
}
catch (PrintJobException e)
{
allAdded = false;
Debug.WriteLine($"Failed to add {xpsFileName} to the print queue: {e.Message}\r\n{e.InnerException}");
}
}
return allAdded;
}
''' <summary>
''' Asyncronously, add a batch of XPS documents to the print queue using a PrintQueue.AddJob method.
''' Handle the thread apartment state required by the PrintQueue.AddJob method.
''' </summary>
''' <param name="xpsFilePaths">A collection of XPS documents.</param>
''' <param name="fastCopy">Whether to validate the XPS documents.</param>
''' <returns>Whether all documents were added to the print queue.</returns>
Public Shared Async Function BatchAddToPrintQueueAsync(xpsFilePaths As IEnumerable(Of String), Optional fastCopy As Boolean = False) As Task(Of Boolean)
Dim isAllPrinted As Boolean = True
' Queue some work to run on the ThreadPool.
' Wait for completion without blocking the calling thread.
Await Task.Run(
Sub()
If fastCopy Then
isAllPrinted = BatchAddToPrintQueue(xpsFilePaths, fastCopy)
Else
' Create a thread to call the PrintQueue.AddJob method.
Dim newThread As New Thread(
Sub()
isAllPrinted = BatchAddToPrintQueue(xpsFilePaths, fastCopy)
End Sub
)
' Set the thread to single-threaded apartment state.
newThread.SetApartmentState(ApartmentState.STA)
' Start the thread.
newThread.Start()
' Wait for thread completion. Blocks the calling thread,
' which is a ThreadPool thread.
newThread.Join()
End If
End Sub
)
Return isAllPrinted
End Function
''' <summary>
''' Add a batch of XPS documents to the print queue using a PrintQueue.AddJob method.
''' </summary>
''' <param name="xpsFilePaths">A collection of XPS documents.</param>
''' <param name="fastCopy">Whether to validate the XPS documents.</param>
''' <returns>Whether all documents were added to the print queue.</returns>
Public Shared Function BatchAddToPrintQueue(xpsFilePaths As IEnumerable(Of String), fastCopy As Boolean) As Boolean
Dim isAllPrinted As Boolean = True
' To print without getting the "Save Output File As" dialog, ensure
' that your default printer is not the Microsoft XPS Document Writer,
' Microsoft Print to PDF, or other print-to-file option.
' Get a reference to the default print queue.
Dim defaultPrintQueue As PrintQueue = LocalPrintServer.GetDefaultPrintQueue()
' Iterate through the document collection.
For Each xpsFilePath As String In xpsFilePaths
' Get document name.
Dim xpsFileName As String = Path.GetFileName(xpsFilePath)
Try
' The AddJob method adds a new print job for an XPS
' document into the print queue, and assigns a job name.
' Use fastCopy to skip XPS validation and progress notifications.
' If fastCopy is false, the thread that calls PrintQueue.AddJob
' must have a single-threaded apartment state.
Dim xpsPrintJob As PrintSystemJobInfo = defaultPrintQueue.AddJob(jobName:=xpsFileName, documentPath:=xpsFilePath, fastCopy)
' If the queue is not paused and the printer is working, then jobs will automatically begin printing.
Debug.WriteLine($"Added {xpsFileName} to the print queue.")
Catch e As PrintJobException
isAllPrinted = False
Debug.WriteLine($"Failed to add {xpsFileName} to the print queue: {e.Message}\r\n{e.InnerException}")
End Try
Next
Return isAllPrinted
End Function
Tavsiye
XpS dosyalarını aşağıdakini kullanarak da yazdırabilirsiniz:
- PrintDialog.PrintDocument veya PrintDialog.PrintVisual yöntemleri.
- XpsDocumentWriter.Write ve XpsDocumentWriter.WriteAsync yöntemleri.
Daha fazla bilgi için bkz. Yazdırma iletişim kutusunu görüntüleme ve Belgeleri yazdırmaya genel bakış.
Ayrıca bakınız
.NET Desktop feedback