读书人

C#并口打印类请做过的帮忙看一下怎么

发布时间: 2012-02-01 16:58:19 作者: rapoo

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
[解决办法]
不懂,帮顶
[解决办法]
友情帮忙!
------解决方案--------------------


读书人网 >C#

热点推荐