CyberSecII Ответов: 2

Кто-нибудь может помочь мне исправить эти ошибки?


public static void StartClientThread(TcpClient client, NotifyBringNewSocket notify)
{
    ProcessTCPClient.notify = notify;
    Thread t = new Thread(ClientThread);
    t.Start(client);
}
private static void ClientThread(TcpClient client)
{
    NetworkStream network;
    try
    {
        network = client.GetStream();
    }
    catch (Exception ex)
    {
        notify.Invoke();
        return;
    }

    // know if it is SSL connection
    string hdr = ReadHeader(network);
    if (hdr == "")
    {
        notify.Invoke();
        return;
    }
    if (hdr.Contains("EXIT"))
    {
        IS_RUNNING = false;
        CleanUp();
        Application.Exit();
        return;
    }
    try
    {
        TcpClient extSoc = new TcpClient("127.0.0.1", 3389);

        SSLReadWrite ssl = new SSLReadWrite();
        ssl.StartSSLReadWriteThread(client, network, extSoc, notify);
        notify.Invoke();
    }
    catch (Exception ex)
    {
        notify.Invoke();
        client.Close();
    }
}




эта часть :
public static void StartClientThread(TcpClient client, NotifyBringNewSocket notify)
{
    ProcessTCPClient.notify = notify;
    Thread t = new Thread(ClientThread);
    t.Start(client);
}


Thread t = new Thread(ClientThread);
есть ли эта ошибка :
CS1503 Аргумент 1: не удается конвертировать из 'групповой метод' на 'ThreadStart'

Что я уже пробовал:

i have try to fix it like this : 
public static void StartClientThread(TcpClient client, NotifyBringNewSocket notify)
    {
        ProcessTCPClient.notify = notify;
        Thread t = new Thread(() => ClientThread(client));
        t.Start(client);
    }

but my code is not working

2 Ответов

Рейтинг:
4

F-ES Sitecore

public static void StartClientThread(TcpClient client, NotifyBringNewSocket notify)
    {
        ProcessTCPClient.notify = notify;
        Thread t = new Thread(() => ClientThread(client));
        t.Start(); // I removed the parameter as it is being passed in the call in the line above
    }


CyberSecII

Спасибо!! Это исправило ошибку!!

Рейтинг:
12

CPallini

Вы должны пройти ThreadStart к Thread конструктор.
См. документация[^] для получения подробной информации о примерах кода.

[обновление]
Изменение от

Цитата:
Поток t = новый поток(ClientThread);
к
Thread t = new Thread(new ThreadStart(ClientThread));
[/обновление]


[обновление II]
Ваш метод должен принять object в качестве аргументов:
private static void ClientThread(object objclient)
{
  TcpClient client = (TcpClient) objclient;
  // ...



[/обновить второй]


CyberSecII

ты можешь показать мне, как это делается?

CPallini

В документации это уже есть. В любом случае, взгляните на мое обновленное решение.

CyberSecII

нет это не работает у меня есть ошибки :(
Нет перегрузки для 'ClientThread матчи клиента делегата ThreadStart'

CPallini

Да, ты прав.
Моя беда, я неправильно понял проблему.
Ваша функция ClientThread должна принимать object в качестве аргумента, для того чтобы использовать ParameterizedThreadStart делегат. Смотрите, опять же, мое обновленное решение

CyberSecII

Спасибо, что нашли время помочь мне!!

CPallini

Добро пожаловать.