在异步任务更新期间更改文本框文本 UI
Change textbox Text during async Task-Update UI
这是我的简单代码:
private async void button1_Click(object sender, EventArgs e)
{
TextBox1.Text = "";
await MyMethodAsync();
}
public async Task MyMethodAsync()
{
TextBox1.Text = "Test 1" + Environment.NewLine;
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(main_url + "Appointment/LoadVisaAppointmentTypeDetail?id=");
req.Method = "GET";
req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*;q=0.8";
req.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36";
req.ContentType = "text/html; charset=utf-8";
req.KeepAlive = true;
req.Timeout = 25000;
req.AllowAutoRedirect = true;
res = (HttpWebResponse)req.GetResponse();
Stream Stream = res.GetResponseStream();
StreamReader reader = new StreamReader(Stream);
string reader_str = reader.ReadToEnd();
...
TextBox1.Text += "Test 2" + Environment.NewLine;
...
TextBox1.Text += "Done";
}
在 运行 这些代码中,我无法移动 TextBox1 的滚动条并且我可以在 Done
行之后看到日志。
我如何在 async Task MyMethodAsync()
工作期间解锁 TextBox1?
您可以尝试这样的操作:
private async void button1_Click(object sender, EventArgs e)
{
string reader_str = "";
textBox1.Text = "Test 1" + Environment.NewLine;
await Task.Run(() =>
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(main_url + "Appointment/LoadVisaAppointmentTypeDetail?id=");
req.Method = "GET";
req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*;q=0.8";
req.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36";
req.ContentType = "text/html; charset=utf-8";
req.KeepAlive = true;
req.Timeout = 25000;
req.AllowAutoRedirect = true;
res = (HttpWebResponse)req.GetResponse();
Stream Stream = res.GetResponseStream();
StreamReader reader = new StreamReader(Stream);
reader_str = reader.ReadToEnd();
});
textBox1.AppendText(reader_str + Environment.NewLine + Environment.NewLine);
textBox1.AppendText("Test 2" + Environment.NewLine);
await Task.Run(() =>
{
// ...
});
textBox1.AppendText(reader_str + Environment.NewLine + Environment.NewLine);
}
这是我的简单代码:
private async void button1_Click(object sender, EventArgs e)
{
TextBox1.Text = "";
await MyMethodAsync();
}
public async Task MyMethodAsync()
{
TextBox1.Text = "Test 1" + Environment.NewLine;
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(main_url + "Appointment/LoadVisaAppointmentTypeDetail?id=");
req.Method = "GET";
req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*;q=0.8";
req.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36";
req.ContentType = "text/html; charset=utf-8";
req.KeepAlive = true;
req.Timeout = 25000;
req.AllowAutoRedirect = true;
res = (HttpWebResponse)req.GetResponse();
Stream Stream = res.GetResponseStream();
StreamReader reader = new StreamReader(Stream);
string reader_str = reader.ReadToEnd();
...
TextBox1.Text += "Test 2" + Environment.NewLine;
...
TextBox1.Text += "Done";
}
在 运行 这些代码中,我无法移动 TextBox1 的滚动条并且我可以在 Done
行之后看到日志。
我如何在 async Task MyMethodAsync()
工作期间解锁 TextBox1?
您可以尝试这样的操作:
private async void button1_Click(object sender, EventArgs e)
{
string reader_str = "";
textBox1.Text = "Test 1" + Environment.NewLine;
await Task.Run(() =>
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(main_url + "Appointment/LoadVisaAppointmentTypeDetail?id=");
req.Method = "GET";
req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*;q=0.8";
req.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36";
req.ContentType = "text/html; charset=utf-8";
req.KeepAlive = true;
req.Timeout = 25000;
req.AllowAutoRedirect = true;
res = (HttpWebResponse)req.GetResponse();
Stream Stream = res.GetResponseStream();
StreamReader reader = new StreamReader(Stream);
reader_str = reader.ReadToEnd();
});
textBox1.AppendText(reader_str + Environment.NewLine + Environment.NewLine);
textBox1.AppendText("Test 2" + Environment.NewLine);
await Task.Run(() =>
{
// ...
});
textBox1.AppendText(reader_str + Environment.NewLine + Environment.NewLine);
}