我是 C# 的新手,在异步方法中检索 textbox
值时遇到了一些问题。我线程检索 UI 中的文本输入并在代码中使用它。 VS 2010 接受了我的代码,但是当我开始调试时,它给了我以下异常
无效的跨线程访问
。想法?我错过了什么吗?
public void Response_Completed(IAsyncResult result)
{
HttpWebRequest request = (HttpWebRequest)result.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result);
using (StreamReader streamReader = new StreamReader(response.GetResponseStream()))
{
JObject rootObject = JObject.Load(new JsonTextReader(streamReader));
string tracknum = trackid.Text; // Invalid cross-thread access exception
string source = rootObject[tracknum]["source"].ToString();
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
//removed
});
}
}
注意:我正在尝试在 Windows Phone 7 平台上执行此操作
最佳答案
您应该在 UI 线程而不是其他线程上获取文本框值。 Invoke method在 UI 线程上执行指定的委托(delegate):
string tracknum = (string)trackid.Invoke(new Func<string>(() => trackid.Text));
编辑:
在 Windows 手机上:
string tracknum = string.Empty;
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
tracknum = trackid.Text;
string source = rootObject[tracknum]["source"].ToString();
});
关于c# - 从另一种方法或异步访问文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13150979/