如何从线程内更新字符串值

Kin*_*ire 3 c# multithreading json xamarin xamarin.forms

我正在编写一个与用户帐户一起使用的Xamarin.Forms跨平台应用程序.问题是我从我的数据库中获取了他们的用户名,但它并没有更新它的值public static string username = "";

我假设它是因为它是在一个线程内运行或与WebRequest有关,我已经做了一段时间的安静研究,但一直无法找到解决方案.

我用来更新用户名的方法如下

private void loadUserData()
    {
        username = "Test";
        Uri uri = new Uri("http://example.com/session-data.php?session_id=" + session);
        WebRequest request = WebRequest.Create(uri);
        request.BeginGetResponse((result) =>
        {
            try
            {
                Stream stream = request.EndGetResponse(result).GetResponseStream();
                StreamReader reader = new StreamReader(stream);
                Device.BeginInvokeOnMainThread(() =>
                {
                    string page_result = reader.ReadToEnd();
                    var jsonReader = new JsonTextReader(new StringReader(page_result))
                    {
                        SupportMultipleContent = true // This is important!
                    };
                    var jsonSerializer = new JsonSerializer();
                    try
                    {
                        while (jsonReader.Read())
                        {
                            UserData userData = jsonSerializer.Deserialize<UserData>(jsonReader);
                            username = userData.username;
                        }

                    }
                    catch (Newtonsoft.Json.JsonReaderException readerExp)
                    {
                        string rEx = readerExp.Message;
                        Debug.WriteLine(rEx);
                    }
                });
            }
            catch (Exception exc)
            {
                string ex = exc.Message;
                Debug.WriteLine(ex);
            }

        }, null);
    }
Run Code Online (Sandbox Code Playgroud)

当URL打开时,它打印出以下行

{"id":7,"username":"TestUser","name":"Test User","bio":"Hello World","private":0}

UserData包含以下代码

class UserData
{
    [JsonProperty("id")]
    public int id { get; set; }

    [JsonProperty("username")]
    public string username { get; set; }

    [JsonProperty("name")]
    public string name { get; set; }

    [JsonProperty("bio")]
    public string bio { get; set; }

    [JsonProperty("private")]
    public int isPrivate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我也注意到以下错误打印出来,我试着用谷歌搜索并没有找到任何我理解的解决方案

解析正无穷大值时出错.路径'',第0行,第0位.

Mar*_*und 7

你得到的错误是一个JSON.net,并且在JSON反序列化期间发生,这意味着更新静态变量没有问题,因为代码永远不会到达那一点(它结束于此catch (Newtonsoft.Json.JsonReaderException readerExp)).

这很好地缩小了你的问题.您从服务器收到的响应很可能出现问题.在行上放置一个断点var jsonReader = ...并检查page_result变量的内容,看它们是否包含任何意外字符.您也可以将响应转储到JSON验证器中以确认它是否实际有效(https://jsonlint.com/)