From df5e5ca2326d7c377d50f9d66cebfd7766f1b627 Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Wed, 3 Jun 2015 15:54:19 -0600 Subject: [PATCH] Fix cross-thread violations in launcher --- TrueCraft.Launcher/Views/LoginView.cs | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/TrueCraft.Launcher/Views/LoginView.cs b/TrueCraft.Launcher/Views/LoginView.cs index d7bcc17..faa92e6 100644 --- a/TrueCraft.Launcher/Views/LoginView.cs +++ b/TrueCraft.Launcher/Views/LoginView.cs @@ -91,6 +91,13 @@ namespace TrueCraft.Launcher.Views UsernameText.Sensitive = PasswordText.Sensitive = LogInButton.Sensitive = RegisterButton.Sensitive = true; } + private class LogInAsyncState + { + public HttpWebRequest Request { get; set; } + public string Username { get; set; } + public string Password { get; set; } + } + private void LogInButton_Clicked(object sender, EventArgs e) { if (string.IsNullOrEmpty(UsernameText.Text) || string.IsNullOrEmpty(PasswordText.Password)) @@ -106,17 +113,23 @@ namespace TrueCraft.Launcher.Views var request = WebRequest.CreateHttp(TrueCraftUser.AuthServer + "/api/login"); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; - request.BeginGetRequestStream(HandleLoginRequestReady, request); + request.BeginGetRequestStream(HandleLoginRequestReady, new LogInAsyncState + { + Request = request, + Username = Window.User.Username, + Password = PasswordText.Password + }); } private void HandleLoginRequestReady(IAsyncResult asyncResult) { try { - var request = (HttpWebRequest)asyncResult.AsyncState; + var state = (LogInAsyncState)asyncResult.AsyncState; + var request = state.Request; var requestStream = request.EndGetRequestStream(asyncResult); using (var writer = new StreamWriter(requestStream)) - writer.Write(string.Format("user={0}&password={1}&version=12", UsernameText.Text, PasswordText.Password)); + writer.Write(string.Format("user={0}&password={1}&version=12", state.Username, state.Password)); request.BeginGetResponse(HandleLoginResponse, request); } catch @@ -143,10 +156,10 @@ namespace TrueCraft.Launcher.Views if (session.Contains(":")) { var parts = session.Split(new[] { ':' }, StringSplitOptions.RemoveEmptyEntries); - Window.User.Username = parts[2]; - Window.User.SessionId = parts[3]; Application.Invoke(() => { + Window.User.Username = parts[2]; + Window.User.SessionId = parts[3]; EnableForm(); Window.MainContainer.Remove(this); Window.MainContainer.PackEnd(Window.MainMenuView = new MainMenuView(Window));