none
Chamar Função Public dentro de uma função Static RRS feed

  • Pergunta

  • Olá, sou novo em c# ainda. Estou querendo desenvolver um software de comunicação entre duas máquinas usando o protocolo TCP em c# no windows Forms. Já fiz dois códigos separados onde um envia um texto e outro lê, pretendo juntar esses dois em um só. Porém no meio do desenvolvimento, surgiu um problema: Preciso chamar uma função public void dentro de uma função static void, pois necessito fazer uso de uma textBox, porém só consigo utiliza-lá com uma função do tipo public. Segue código completo da minha aplicação:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Net;
    using System.Net.Sockets;
    using System.Threading;
    
    namespace TesteComunication_Master
    {
        public partial class Form1 : Form
        {
            public TcpClient client;
            
            public static TcpListener listener = new TcpListener(IPAddress.Any, port);
            public static int port = 32742;
            public static string ip = "Meu IP";
            public static NetworkStream dataStream;
            public static Thread con = new Thread(waitConection);
            public Thread getMessages = new Thread(readMessage);
    
           
            public void analise(string msg)
            {
                txtChat.Text = txtChat.Text + "\n" + "Pessoa: " + msg;
            }
    
            static int Desembaralhar(byte[] buffer)
            {
                int i = 0;
                for (; i < buffer.Length; i++)
                {
    
                    if (buffer[i] == 0x00)
                    {
                        break;
                    }
                }
                return i;
            }
    
            static void readMessage()
            {
                string temp = "";
                while (true)
                {
                    
                    if (dataStream.DataAvailable == true)
                    {
    
                        byte[] buffer = new byte[1048];
                        dataStream.Read(buffer, 0, buffer.Length);
                        int cutAt = Desembaralhar(buffer);
                        for (int i = 0; i < cutAt; i++)
                        {
                            temp += (char)buffer[i];
                        }
                        analise(temp);
                        temp = string.Empty;
                        dataStream.Flush();
                    }
    
                }
            }
            static void waitConection()
            {
                
            }
            public Form1()
            {
                InitializeComponent();
                Begin();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
    
            }
    
            static void Begin()
            {
                
            }
    
            private void txtChat_TextChanged(object sender, EventArgs e)
            {
    
            }
        }
    }
    


    O erro ocorre quando tento chamar a função "analise" do tipo public void dentro da "readMessage" que é uma função do tipo static. Esse é o trecho do código que dá erro: 

    analise(temp);

    aparece a seguinte menagem de erro: "uma referência de objeto é necessária para o campo, o método ou a propriedade "Form1.analise(string)" não estática".

    Desde já agradeço muito!

    segunda-feira, 23 de abril de 2018 01:00

Respostas

  • Bom dia MUc-sharp,

    Nesta situação basta trocar a assinatura da função analise para tipo estático, pois você esta partindo de um método estático:

    public void analise(string msg)

    public static void analise(string msg)

    []'s

    segunda-feira, 23 de abril de 2018 11:29
  • Boa tarde,

    Por falta de retorno essa thread está encerrada.

    Se necessário, favor abrir uma nova thread.

    Atenciosamente,


    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quarta-feira, 2 de maio de 2018 19:05
    Moderador

Todas as Respostas

  • Bom dia MUc-sharp,

    Nesta situação basta trocar a assinatura da função analise para tipo estático, pois você esta partindo de um método estático:

    public void analise(string msg)

    public static void analise(string msg)

    []'s

    segunda-feira, 23 de abril de 2018 11:29
  • Boa tarde,

    Por falta de retorno essa thread está encerrada.

    Se necessário, favor abrir uma nova thread.

    Atenciosamente,


    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quarta-feira, 2 de maio de 2018 19:05
    Moderador