首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#并口打印类,请做过的帮忙看一下怎么该得更合理

2012-02-01 
C#并口打印类,请做过的帮忙看一下如何该得更合理类是网上找的,不知是哪位高人写的,我调用的时候使用如下语

C#并口打印类,请做过的帮忙看一下如何该得更合理
类是网上找的,不知是哪位高人写的,我调用的时候使用如下语句:
                      try
                        {
                                LPTControl   lpt   =   new   LPTControl();
                                lpt.Open();
                                lpt.Write( "打印测试! ");
                                lpt.Close();
                        }
                        catch
                        {
                        }
因为是直接操作并口,打印的时候速度非常快,效果还可以。
现在的问题是,如果电脑上没有安装打印机时,执行lpt.Write( "打印测试! ");会非常慢,程序像死了一样(lpt.Open();这句能通过)请问没有安装打印机时程序该如何处理?


使用的类如下,装打印机时效果还可以。
        public   class   LPTControl
        {
                [StructLayout(LayoutKind.Sequential)]
                private   struct   OVERLAPPED
                {
                        int   Internal;
                        int   InternalHigh;
                        int   Offset;
                        int   OffSetHigh;
                        int   hEvent;
                }
                [DllImport( "kernel32.dll ")]
                private   static   extern   int   CreateFile(
                  string   lpFileName,
                  uint   dwDesiredAccess,
                  int   dwShareMode,
                  int   lpSecurityAttributes,
                  int   dwCreationDisposition,
                  int   dwFlagsAndAttributes,
                  int   hTemplateFile
                  );
                [DllImport( "kernel32.dll ")]
                private   static   extern   bool   WriteFile(
                  int   hFile,
                  byte[]   lpBuffer,


                  int   nNumberOfBytesToWrite,
                  ref   int   lpNumberOfBytesWritten,
                  ref   OVERLAPPED   lpOverlapped
                  );
                [DllImport( "kernel32.dll ")]
                private   static   extern   bool   CloseHandle(
                  int   hObject
                  );
                private   int   iHandle;
                public   bool   Open()
                {
                        iHandle   =   CreateFile( "lpt1 ",   0x40000000,   0,   0,   3,   0,   0);
                        if   (iHandle   !=   -1)
                        {
                                return   true;
                        }
                        else
                        {
                                return   false;
                        }
                }
                public   bool   Write(String   Mystring)
                {
                        if   (iHandle   !=   -1)
                        {
                                OVERLAPPED   x   =   new   OVERLAPPED();
                                int   i   =   0;

                                byte[]   mybyte   =   System.Text.Encoding.Default.GetBytes(Mystring);
                                bool   b   =   WriteFile(iHandle,   mybyte,   mybyte.Length,   ref   i,   ref   x);
                                return   b;
                        }
                        else


                        {
                                throw   new   Exception( "不能连接到打印机! ");
                        }
                }
                public   bool   Write(byte[]   mybyte)
                {
                        if   (iHandle   !=   -1)
                        {
                                OVERLAPPED   x   =   new   OVERLAPPED();
                                int   i   =   0;
                                WriteFile(iHandle,   mybyte,   mybyte.Length,
                                  ref   i,   ref   x);
                                return   true;
                        }
                        else
                        {
                                throw   new   Exception( "不能连接到打印机! ");
                        }
                }
                public   bool   Close()
                {
                        return   CloseHandle(iHandle);
                }
        }

[解决办法]
具体的我不懂,不过似乎可以判断一下是否安装了打印机...
[解决办法]
帮你顶
[解决办法]
加个超时处理?
[解决办法]
uses Printers;

Printer.Printers.Count > 0; ?

[解决办法]
没有安装打印机Open时候应该返回false吧?
[解决办法]
设置OVERLAPPED做非同步(不等待打印结果)就可以了

MSDN有资料 o.o
[解决办法]
不懂,帮顶
[解决办法]
友情帮忙!
------解决方案--------------------


热点排行