De Código java para C#

Olá pessoal
Este código exemplo em java preciso passar para um código em C# .
Este programa usa porta serial para imprimir uma relação de cheques.

Não entendi algumas coisas:
szCmds = wdCnt+3; sempre incrementa +3 mas no final iguala a 3 szCmds = 3;
serialPort.writeByte(btCmds[Count]); o comando equivalente no c# não consegui fazer funcionar,

Quanto as listas ( arrays) o funcionamento no c# é igual do java ?

Preciso fazer em c# porque o sistema utilizado desenvolvido já é em C#, vou fazer somente uma customização .

Este pequeno exemplo foi fornecido pelo fabricante da impressora.

*************************** exemplo java *-********************
import jssc.SerialPort;
import jssc.SerialPortException;
import jssc.SerialPortList;
import jssc.SerialPortEvent;
import jssc.SerialPortEventListener;

public class Deskcheck
{
public static void main(String[] args) throws Exception

{
System.out.println("Entrou no Main.");

try
{
SerialPort serialPort;
PortNames = new Vector<String>();
String[] portNames = SerialPortList.getPortNames();
PortNames.clear();
for(int i = 0; i < portNames.length; i++){
PortNames.add( portNames[i] );
}

serialPort = new SerialPort( PortNames.toArray()[0].toString() );
serialPort.openPort(); //Open serial port
serialPort.setParams( //Set params. Also serialPort.setParams(9600, 8, 1, 0);
SerialPort.BAUDRATE_9600
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
byte btCmds[] = new byte[200];
int szCmds, wdCnt;
String stValue;
//Envia pacote de dados
btCmds[0] = 0x1B;
btCmds[1] = ''?''; //Pede Status
szCmds = 2; //Comando de 2 Bytes
for(int Count = 0;Count < szCmds; Count ++)
serialPort.writeByte( btCmds[Count]); //Preferi usar esse modo.
//serialPort.writeBytes( btCmds); //Outro modo

//Aguarda algum retorno

int Idx=0, wdTmo, pmTimeOut = 2000; //Timeout em miliseg
byte[] ptData = new byte[10];
byte[] Ret = new byte[2];

wdTmo = pmTimeOut;
while( wdTmo > 0 )
{
while( serialPort.getInputBufferBytesCount() > 0 )
{
wdTmo = pmTimeOut;
Ret = serialPort.readBytes(1);
ptData[Idx] = Ret[0];
Idx = Idx + 1;
}
TimeUnit.MILLISECONDS.sleep(100);
wdTmo = wdTmo - 100;
}

System.out.println("Dados Recebidos: "+ptData);
//Monta comando de um cheque completo
stValue = "001"; //Banco
btCmds[1] = (byte)0xA2;
btCmds[0] = 0x1B;
for(wdCnt=0;wdCnt < stValue.length() ;wdCnt++ )
{ btCmds[wdCnt+2] = stValue.getBytes()[wdCnt]; }
btCmds[wdCnt+2] = 0x0D;
szCmds = wdCnt+3;
for(int Count = 0;Count < szCmds; Count ++) //Envia Dados
serialPort.writeByte(btCmds[Count]);

stValue = "123456,00"; //Valor
obReg.Valor = stValue;
btCmds[1] = (byte)0xA3;
btCmds[0] = 0x1B;
for(wdCnt=0;wdCnt < stValue.length() ;wdCnt++ )
{ btCmds[wdCnt+2] = stValue.getBytes()[wdCnt]; }
btCmds[wdCnt+2] = 0x0D;
szCmds = wdCnt+3;
for(int Count = 0;Count < szCmds; Count ++) //Envia Dados
serialPort.writeByte(btCmds[Count]);
stValue = "01/01/2018"; //Data
btCmds[1] = (byte)0xA4;
btCmds[0] = 0x1B;
for(wdCnt=0;wdCnt < stValue.length() ;wdCnt++ )
{ btCmds[wdCnt+2] = stValue.getBytes()[wdCnt]; }
btCmds[wdCnt+2] = 0x0D;
szCmds = wdCnt+3;
for(int Count = 0;Count < szCmds; Count ++) //Envia Dados
serialPort.writeByte(btCmds[Count]);

stValue = "ERECHIM"; //Local
if( stValue.length() > 1 ) {
btCmds[1] = (byte)0xA1;
btCmds[0] = 0x1B;
for(wdCnt=0;wdCnt < stValue.length() ;wdCnt++ )
{ btCmds[wdCnt+2] = stValue.getBytes()[wdCnt]; }
btCmds[wdCnt+2] = 0x0D;
szCmds = wdCnt+3;
for(int Count = 0;Count < szCmds; Count ++) //Envia Dados
serialPort.writeByte(btCmds[Count]);
}

stValue = "FAVORECIDO"; //Favorecido
if( stValue.length() > 1 ) {
btCmds[1] = (byte)0xA0;
btCmds[0] = 0x1B;
for(wdCnt=0;wdCnt < stValue.length() ;wdCnt++ )
{ btCmds[wdCnt+2] = stValue.getBytes()[wdCnt]; }
btCmds[wdCnt+2] = 0x0D;
szCmds = wdCnt+3;
for(int Count = 0;Count < szCmds; Count ++) //Envia Dados
serialPort.writeByte(btCmds[Count]);
}

btCmds[1] = (byte)0xB0; //Imprime
btCmds[0] = 0x1B;
btCmds[2] = 0x0D;
szCmds = 3;
for(int Count = 0;Count < szCmds; Count ++) //Envia Dados
serialPort.writeByte(btCmds[Count]);
serialPort.closePort();
}
catch (SerialPortException ex) { System.out.println(ex); }

System.out.println("Encerrou o Main.");
System.exit(0);
}
}

Levanta os requisitos e faz do zero. Vai ser mais fácil e limpo. Pesquisa no google como imprimir usando porta serial com C#.

Valeu ! acho que vou fazer isso mesmo; sempre o prazo é curto, as vezes acabando perdendo mais tempo pra remendar.

Refiz o programa em C#, mas não esta imprimindo… alguém já fez isso. Onde posso ter errado.

 void ImprimirCheque()
        {
            try
            {
                instanciaDoForm1 = frm1;
                //int szCmds, wdCnt;
                String stValue;
                List<string> listaDados = new List<string>();
                
                MessageBox.Show("Inicio impressao");

                //Favorecido
                stValue = "JHON FAVORECIDO";
                listaDados.Add("\x1B");
                listaDados.Add("\xA0");
                listaDados.Add(stValue);
                listaDados.Add("\x0D");
                Encoding u8 = Encoding.UTF8;
                //byte[] favorecido = listaDados.SelectMany(x => u8.GetBytes(x)).ToArray();
                //instanciaDoForm1.Porta.Write(favorecido, 0, favorecido.Length);
                //listaDados.Clear();
                //local
                stValue = "FRANCISCO BELTRAO";
                listaDados.Add("\x1B");
                listaDados.Add("\xA1");
                listaDados.Add(stValue);
                listaDados.Add("\x0D");
                
                //byte[] city = listaDados.SelectMany(x => u8.GetBytes(x)).ToArray();
                //instanciaDoForm1.Porta.Write(city, 0, city.Length);
                //listaDados.Clear();
                //Banco
                stValue = "748";      
                listaDados.Add("\x1B");
                listaDados.Add("\xA2");
                listaDados.Add(stValue);
                
                //byte[] banco = listaDados.SelectMany(x => u8.GetBytes(x)).ToArray();
                //instanciaDoForm1.Porta.Write(banco, 0, banco.Length);
                //listaDados.Clear();
                //Valor
                stValue = "12350,50"; 
                listaDados.Add("\x1B");
                listaDados.Add("\xA3");
                listaDados.Add(stValue);
                listaDados.Add("\x0D");
                
                //byte[] valor = listaDados.SelectMany(x => u8.GetBytes(x)).ToArray();
                //instanciaDoForm1.Porta.Write(valor, 0, valor.Length);
                //listaDados.Clear();

                //Data
                stValue = "01/10/2019";
                listaDados.Add("\x1B");
                listaDados.Add("\xA4");
                listaDados.Add(stValue);
                listaDados.Add("\x0D");
                
                //byte[] data = listaDados.SelectMany(x => u8.GetBytes(x)).ToArray();
                //instanciaDoForm1.Porta.Write(data, 0, data.Length);
                //listaDados.Clear();

                // Inicia a Impressao com dados enviados 
                listaDados.Add("\x1B");
                listaDados.Add("\xB0");
                listaDados.Add("\x0D"); 
                                    
                byte[] result = listaDados.SelectMany(x => u8.GetBytes(x)).ToArray();
                instanciaDoForm1.Porta.Write(result, 0, result.Length);

                MessageBox.Show("Fim  impressao");
            }//try
            catch (Exception ex)
            {
                throw new Exception("Erro " + ex);
            }
        }
    }
}

}

No código que postou nao está usando nada de porta serial. Pesquisa algum tutorial, exemplo: https://docs.microsoft.com/en-us/dotnet/api/system.io.ports.serialport.writeline?view=netframework-4.8

eu tinha um objeto como nome Porta. Por isso eu passei o formulário como instanciaDoForm1.
Mas resolvi fazer como no exemplo que passou.
O problema agora é que o método imprimir esta em outra classe, estou tentando passar a variavel do Serial Port para este método, mas não estou conseguindo.
//Método para imprimir na Classe Imprimir
class Imprimir
{

    Form1 instanciaDoForm1; //crio um objeto do tipo FORM 1, que será usado dentro da classe
    public Imprimir(Form1 frm1) //recebo por parametro um objeto do tipo FORM1
    {
        // dá erro dizendo  que o metodo não pode ser publico, na vdd de qualquer modo da erro.
        public  void ImprimirCheque(SerialPort Porta)
        {

//chamado do método
public partial class Form1 : Form
{
static SerialPort _serialPort;
public Form1()
{
InitializeComponent();
}
private void Button1_Click(object sender, EventArgs e)
{
Imprimir imprimir = new Imprimir(this);
// aqui chamaria o metodo passando a variavel _serialPort instanciada no load do formulario para usar na impressao, so que o metodo esta com erro.
imprimir.(_serialPort);

Vai por partes. Conseguiu imprimir na portal serial? Só depois disso se preocupe forms.