首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C#打印文件,等待关闭文件-程序挂起

是指在C#开发中,当需要打印文件时,程序会等待打印操作完成后再关闭文件,以避免在文件被关闭前对其进行其他操作,从而保证文件的完整性和正确性。

在C#中,可以使用PrintDocument类来实现打印文件的功能。以下是一个示例代码:

代码语言:csharp
复制
using System;
using System.Drawing;
using System.Drawing.Printing;

public class PrintFile
{
    private static string filePath = "path/to/file.txt";

    public static void Main()
    {
        PrintDocument printDoc = new PrintDocument();
        printDoc.PrintPage += new PrintPageEventHandler(PrintPageHandler);

        // 设置打印机名称(可选)
        // printDoc.PrinterSettings.PrinterName = "Printer Name";

        // 设置打印份数(可选)
        // printDoc.PrinterSettings.Copies = 1;

        // 打印文件
        printDoc.Print();

        // 等待打印操作完成后再关闭文件
        printDoc.EndPrint += new PrintEventHandler(EndPrintHandler);

        Console.ReadLine();
    }

    private static void PrintPageHandler(object sender, PrintPageEventArgs e)
    {
        // 读取文件内容并打印
        string fileContent = System.IO.File.ReadAllText(filePath);
        e.Graphics.DrawString(fileContent, new Font("Arial", 12), Brushes.Black, 10, 10);
    }

    private static void EndPrintHandler(object sender, PrintEventArgs e)
    {
        // 关闭文件
        // File.Close();
    }
}

在上述示例代码中,首先定义了一个PrintDocument对象,并注册了PrintPage事件处理程序和EndPrint事件处理程序。PrintPage事件处理程序用于在打印页面时读取文件内容并进行打印操作,而EndPrint事件处理程序则用于在打印操作完成后关闭文件。

在实际应用中,可以根据需要设置打印机名称、打印份数等参数。此外,还可以根据具体需求对打印页面进行自定义布局和样式。

推荐的腾讯云相关产品:腾讯云云服务器(CVM)、腾讯云云数据库MySQL、腾讯云对象存储(COS)等。您可以通过访问腾讯云官方网站(https://cloud.tencent.com/)了解更多关于这些产品的详细信息和使用指南。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • c# 调用Microsoft XPS Document Writer打印机,将Pdf文件转换成Xps文件「建议收藏」

    开发环境:VS2010,.Net FrameWork4.0,C#,WPF 窗体代码: <Window x:Class="TestPdfToXps1.MainWindow" xmlns="...IntPtr.Zero); PostMessage(hChild, WM_LBUTTONUP, IntPtr.Zero, IntPtr.Zero); /***** 跟踪<em>打印</em>机队列中的<em>文件</em><em>打印</em>状况...,知道<em>文件</em><em>打印</em>完成为止 *****/ // 调用本地<em>打印</em>机队列 System.Printing.LocalPrintServer prtSrv = new System.Printing.LocalPrintServer...,知道<em>打印</em>队列中没有<em>打印</em>任务时结束 do { // <em>等待</em>处理 System.Threading.Thread.Sleep...psInfo.Arguments = String.Format(@" /s /h /t {0} ""Microsoft XPS Document Writer""", pdf_filepath); 发布者:全栈程序员栈长

    2.3K10

    C#在WINForm程序中通过三种方式创建XML文件

    FilesInformation> string path = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase; 获取和设置包含该应用程序的目录的名称...File.Exists(path + XmlFileName) File.Exists是判断文件是否存在,传入参数为路径+文件名 XmlDocument xmlDoc = new XmlDocument...XmlDocument对象 XmlDeclaration xmlSM = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null); 这一句是添加xml文件头的声明...xmlDoc.AppendChild(xmlSM); 这一句是将创建的XmlDocument对象追加到xml文件声明后面 XmlElement DeviceTree = xmlDoc.CreateElement...xmlDoc.AppendChild(DeviceTree); 这一句是将创建的节点添加到开始创建的XmlDocument对象中 xmlDoc.Save(path + XmlFileName); 最后是保存创建好的xml文件

    1.6K10

    csharp 基础

    C#语言在编写时有点像JAVA,在运行时有点像C语言,都需要被编译成可执行文件(.EXE)才能执行并显示结果。 1.2 C#环境 C#需要在.NET环境下运行。...打开此电脑=》打开C盘=》找到Windows下的Microsoft.NET文件夹=》打开Framework文件夹随便选择一个版本=》复制绝对路径=》返回到资源管理器点击右键=》选择属性=》高级系统设置=...2、基本语法 2.1 语法基础 任何一个C#程序第一条语句都是using System;using语句表示引入命名空间,一个C#可引入多个命名空间 namespace 关键字表示当前C#程序中定义的命名空间...,里面是定义的类 class 关键字用于申明一个类,用于定义方法或者行为 Main 方法是C#程序的入口,表示当执行时类需要做什么事情 使用Console.WriteLine()来打印数据 使用Console.ReadKey...()表示等待,防止程序从 Visual Studio .NET 启动时屏幕会快速运行并关闭 使用 // 表示单行注释,/**/ 表示多行注释 2.2 helloworld 新建一个目录并使用vscode

    58110

    深入理解阻塞队列

    先放张图: 根据前面的描述, 我们来考虑下阻塞队列在程序中会出现的问题: 阻塞队列 需要实现两个功能: 使线程等待与唤醒线程....具体介绍如下: 在极端条件下, 需要挂起线程, 等待队列满足条件后,再去执行添加或提取 操作 待队列满足了条件之后, 通知线程去继续其挂起之前的操作.......但还是有个不错的C#实现---->。...当时看的时候,想起来当初看>第十章的管道。书上介绍的是:开一个task去读取文件名,放到阻塞队列中,然后开一个队列根据文件名读取内容,这个应用于邮件接收下载是一样的。...具体介绍如下: // 在极端条件下, 需要挂起线程, 等待队列满足条件后,再去执行添加或提取 操作 // 待队列满足了条件之后, 通知线程去继续其挂起之前的操作....

    22920

    C#线程

    在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样就大大提高了程序的效率。   在 C# 中,System.Threading.Thread 类用于线程的工作。...我们在编写线程程序时首先要引入System.Threading空间。 创建线程 ----   当 C# 程序开始执行时,主线程自动创建。使用 Thread 类创建的线程被主线程的子线程调用。...去试一试吧,后台线程特别适合于完成后台任务,如关闭word等。...;   Suspend():该方法并不终止未完成的线程,它仅仅挂起线程,以后还可恢复;   Resume():恢复被Suspend()方法挂起的线程的执行。   ...在C#应用程序中,用户可以设定5个不同的优先级,由高到低分别是Highest,AboveNormal,Normal,BelowNormal,Lowest,在创建线程时如果不指定优先级,那么系统默认为ThreadPriority.Normal

    86250

    多线程系列(二)之Thread类

    在上一遍文章中讲到多线程基础,在此篇文章中我们来学习C#里面Thread类。Thread类是在.net framework1.0版本中推出的API。...)、休眠、继续、终止 thread.Suspend();//暂停,挂起线程,如果线程已经挂起,则不起作用 thread.Resume();//继续已经挂起的线程 thread.Abort();//终止线程...,会在当前线程中抛出一个异常引发线程停止,不过会有延迟,因为线程属于计算机资源,程序想停下线程,只能向操作系统通知(抛异常),不一定真的能停下来 Thread.ResetAbort();//终止当前线程...thread.Join(); //等待线程thread执行完毕 thread.Join(5000); //限时等待,最多等待5000毫秒 线程的优先级 thread.Priority = ThreadPriority.Highest...但不代表优先完成,甚至说极端情况下,还有意外发生,不能通过这个来控制线程的执行先后顺序 前台线程与后台线程 thread.IsBackground = false;//默认是false 前台线程,进程关闭

    63430

    Lua使用协程实现多线程

    要下载一个文件,必须先打开一个到对应站点的连接,然后发送下载文件的请求,接收文件,最后关闭连接。在Lua语言中,可以按以下步骤来完成这项任务。...当主机关闭连接时,把输入流中剩余的内容打印出来,然后退出接收循环。 下载完文件后,关闭连接: c:close() 既然我们知道了如何下载一个文件,那么再回到下载多个文件的问题上。...最简单的做法是逐个地下载文件。不过,这种串行的做法太慢了,它只能在下载完一个文件后再下载一个文件。当读取一个远程文件时,程序把大部分的时间耗费在了等待数据到达上。...更确切地说,程序将时间耗费在了对receive的阻塞调用上。因此,如果一个程序能够同时并行下载所有文件的话,就会快很多。当一个连接没有可用数据时,程序便可以从其他连接读取数据。...当至少由一个线程有数据可读取时不会有问题;然而,如果所有的线程都没有数据可读,调度程序就会陷入忙等待,不断地从一个线程切换到另一个线程来检查是否有数据可读。

    1.7K40

    Kotlin | 协程是什么?

    那上面注释中 挂起 是什么意思呢? 什么是挂起? 观察上面的打印日志,我们不难发现,在调用 delay 函数时,线程并没有停下,相对来说,只是我们的协程代码块被挂起等待恢复。...只有前面的挂起函数执行结束,我们的协程代码块才能继续执行。借用一幅图来说明如下: 所以所谓的挂起其实是代码层次的一个处理,从而使得我们可以以同步形式去写异步的代码。 非阻塞程序?...官方的解释叫做 挂起点 比如我有一段代码: println("123".length) 最先执行的是"123".length,然后执行 println打印长度,此时执行 “123”.length 就可以当做一个挂起点...,也就是代码从这里停止,等待计算出结果,然而此时内部线程却没有停止,当计算完的时候,也就是挂起结束,此时接着执行我们的打印语句。...lifecycleScope.launch { ... } } } 同样,当fragment或者Activity关闭时,协程同样将自动关闭

    57610

    第十节:Activiti6.0——四种Job工作的产生与管理

    挂起任务,比如将未到时间的定时任务手动暂停,则会存放在挂起任务表act_ru_suspended_job中。...ID(关闭异步执行器),查看一般工作数据库:act_ru_job ?...定时时间到了之后将会被删除,同时需要配置中开启异步执行器才会自动执行 遇到问题: 定时任务到时间后,没有继续执行,需要确定 已解决: 程序不能关闭,不然定时时间到了,任务执行不了 设计流程 bpmn...runtimeService.startProcessInstanceById(processDefinition.getId()); System.out.println("流程实例id:" + processInstance.getId()); //程序不能马上关闭...,需要等待定时任务执行,然后程序死了,定时任务没法执行 Thread.sleep(120000); processEngine.close(); System.exit(0); 查看数据库 ?

    3.1K20
    领券