Получаю данные с принтера и вывожу их в listbox, но проблема в том, что при получении данных с сокета зависает намертво форма..
Вот как выглядит метод, который я вызываю
public static string GetPrinterEvents(object server, object cmd)
{
string xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><REA-JET>" +
"<REA-PI><VersionSelect><Version>3.5</Version>" +
"</VersionSelect></REA-PI></REA-JET>";
char STX = '\u0002';
char ETX = '\u0003';
char LF = '\n';
byte[] buffer = new byte[10240];
Socket soc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ipAdd = IPAddress.Parse((string)server);
IPEndPoint remoteEP = new IPEndPoint(ipAdd, 22171);
soc.Connect(remoteEP);
byte[] byData = Encoding.UTF8.GetBytes("");
soc.Send(byData);
soc.Receive(buffer);
byte[] getVersions = Encoding.UTF8.GetBytes(STX + "REA-PI" + ETX + LF);
soc.Send(getVersions);
soc.Receive(buffer);
byte[] sendversion = Encoding.UTF8.GetBytes("Content-Length: " + xml.Length.ToString() + LF + LF + xml);
soc.Send(sendversion);
soc.Receive(buffer);
//Отправка комманды
xml = cmd;
byte[] setCMD = Encoding.UTF8.GetBytes("Content-Length: " + xml.Length.ToString() + LF + LF + xml);
soc.Send(setCMD);
int iRx = soc.Receive(buffer);
char[] chars = new char[iRx];
Decoder d = Encoding.UTF8.GetDecoder();
int charLen = d.GetChars(buffer, 0, iRx, chars, 0);
String recive = new String(chars);
iRx = soc.Receive(buffer);
chars = new char[iRx];
d = Encoding.UTF8.GetDecoder();
charLen = d.GetChars(buffer, 0, iRx, chars, 0);
recive = new String(chars);
if (recive.Contains("successful executed"))
{
soc.Close();
return "Исполнено!";
}
return recive;
}
public static string SetJob(string server, string filename)
{
string xml = "<REA-JET><REA-PI version=\"3.5\"><Command name=\"SETJOB\" id=\"0\"><Data><Job id=\"0\" /><Filename>"
+ filename + "</Filename></Data></Command></REA-PI></REA-JET>";
return HandShake(server, xml);
}
вот как я вызываю
var setResult = ReajetCmd.SetJob("169.254.133.223", 0, "test.job");
listBox1.Items.Add(setResult);
Нет никакой возможности делать это в отдельном потоке? и результат выводить в листбокс? Если есть , то как это реализовать?