Выражение обозначает «значение», где «тип» или «группа методов» ожидалась при вызове StartCoroutine внутри потока в Unity. - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть этот класс.

public class UploadData: MonoBehaviour{
    public void uploadindividualshot(pushdatawrapper pw){       
        StartCoroutine (PushData (pw));
        Thread t = new Thread(new ThreadStart(StartCoroutine(PushData(pw))));
        t.Start();
        t.IsBackground = true;
    }

    private IEnumerator PushData(pushdatawrapper pdata){
        WWW www;
        Hashtable postHeader = new Hashtable();
        postHeader.Add("Content-Type", "application/json");
        string dataToJason = JsonUtility.ToJson(pdata);
        Debug.Log ("dataToJason " + dataToJason);
        // convert json string to byte
        var formData = System.Text.Encoding.UTF8.GetBytes(dataToJason);
        www = new WWW("http://rmotion.rapsodo.com/api/push/new", formData, postHeader);

        return www;

    }
    IEnumerator WaitForRequest(WWW data)
    {
        yield return data; // Wait until the download is done
        if (data.error != null)
        {
            Debug.Log("There was an error sending request: " + data.text);
        }
        else
        {
            Debug.Log("WWW Request: " + data.text);
        }
    }

}

Я получил ошибку в Thread t = new Thread(new ThreadStart(StartCoroutine(PushData(pw))));, так как Expression обозначает ожидаемый тип value', where a или `группа методов '.

Как можно решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

Забудьте о том, что вы хотите сделать, даже если вы избавитесь от своей ошибки, из-за другой ошибки, которую вы получите, как только ваш Coroutine запустится, потому что Unity является поточно-ориентированным, вы не можете использовать специфичный для Unity API вне основного потока (кроме векторов) если не ошибаюсь). У вас есть 2 варианта.

  1. используйте только сопрограмму без потоков.
  2. использовать поток, но избегать Unity API, используя класс WebClient, например
0 голосов
/ 28 апреля 2018

Я думаю, что вы хотели написать

Thread t = new Thread(obj => { PushData(obj); });

PushData - группа методов. PushData(pw) - фактический вызов метода. Вы можете [должны] передавать данные в ваш поток, например, t.Start(pw);

Примечание: t.IsBackground = true; должно быть установлено до t.Start() вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...