Usuário com melhor resposta
Chamar Função Public dentro de uma função Static

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!
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
- Marcado como Resposta Filipe B CastroModerator quarta-feira, 2 de maio de 2018 19:05
-
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.
- Marcado como Resposta Filipe B CastroModerator quarta-feira, 2 de maio de 2018 19:05
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
- Marcado como Resposta Filipe B CastroModerator quarta-feira, 2 de maio de 2018 19:05
-
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.
- Marcado como Resposta Filipe B CastroModerator quarta-feira, 2 de maio de 2018 19:05