如果我想在TableView中添加一个项目,则必须停止循环。但我有一个WebResponse,并且每个HTTP Chunked都需要一个新项目。
是否有人有解决方案将项目添加到TableView而不停止while循环?
这是我的主题
new System.Threading.Thread(new System.Threading.ThreadStart(() =>
{
InvokeOnMainThread(() =>
{
HttpRequest t = new HttpRequest(TableView, source);
t.Start();
});
})).Start();
这是我的循环:
WebResponse webResponse = web.GetResponse();
Stream stream = webResponse.GetResponseStream();
var reader = new XmlTextReader(stream);
string telegram = "";
int check = 0;
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
break;
case XmlNodeType.Text:
break;
case XmlNodeType.EndElement:
break;
}
}
并在循环中的一个功能我这样做
(tableView.Source as TelegrammSource).AddTelegramm(details);
tableView.ReloadData();
答案 0 :(得分:0)
有一个示例来完成异步数据请求并刷新您的tableview:
string strURL = "https://api.bitcoinaverage.com/ticker/";
MyHTTPRequestManager.Instance.GetDataFromUrl (strURL,(string dataStr)=>{
Console.WriteLine("Getting data succeed");
Console.WriteLine("The dataStr = "+dataStr);
//update your dataList here
InvokeOnMainThread(delegate {
//Update your tableView or collectionView here, all UI stuff must be invoke on Main thread
});
});
这是MyHTTPRequestManager.cs:
public class MyHTTPRequestManager
{
public delegate void GettingDataCallback(string dataStr);
private static MyHTTPRequestManager instance = null;
public static MyHTTPRequestManager Instance{
get{
if(null == instance)
instance = new MyHTTPRequestManager();
return instance;
}
}
public void GetDataFromUrl(string strURL,GettingDataCallback callback)
{
Console.WriteLine ("Begin request data.");
System.Net.HttpWebRequest request;
request = (System.Net.HttpWebRequest)WebRequest.Create(strURL);
System.Net.HttpWebResponse response;
response = (System.Net.HttpWebResponse)request.GetResponse();
System.IO.StreamReader myreader = new System.IO.StreamReader(response.GetResponseStream(), Encoding.UTF8);
string responseText = myreader.ReadToEnd();
myreader.Close();
Console.WriteLine ("Getting succeed, invoke callback.");
callback.Invoke (responseText);
}
}
希望它可以帮到你。
答案 1 :(得分:0)
这是我在TableviewController上的ViewDidLoad
base.ViewDidLoad();
Console.Out.WriteLine("ViewDidLoad");
TableView.SeparatorColor = UIColor.Black;
TableView.SeparatorStyle = UITableViewCellSeparatorStyle.SingleLine;
source = new TelegrammSource();
TableView.Source = source;
new System.Threading.Thread(new System.Threading.ThreadStart(() =>
{
InvokeOnMainThread(() =>
{
HttpRequest t = new HttpRequest(TableView, source);
t.Start();
});
})).Start();
这是我的HttpRequest
public class HttpRequest
{
//private volatile bool _shouldStop;
public string url = "";
private HttpWebRequest web = null;
readonly UITableView tableView;
public HttpRequest(UITableView tableView, TelegrammSource source)
{
this.tableView = tableView;
url = "http://www.example.com";
web = (HttpWebRequest)WebRequest.Create(url);
web.Credentials = new NetworkCredential((kanalsettings[(NSString)GlobaleVariablen.KE_BENUTZERNAME] as NSString), (kanalsettings[(NSString)GlobaleVariablen.KE_PASSWORT] as NSString));
}
public void Start()
{
WebResponse webResponse = web.GetResponse();
Stream stream = webResponse.GetResponseStream();
var reader = new XmlTextReader(stream);
string telegram = "";
int check = 0;
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
break;
case XmlNodeType.Text:
break;
case XmlNodeType.EndElement:
Process(telegram);
break;
}
}
}
public void Process(string result)
{
var details = new TelegrammDetails();
var xml = new XmlDocument();
xml.LoadXml(result);
XmlNodeList telegram = xml.SelectNodes("/");
foreach (XmlNode item in telegram)
{
}
(tableView.Source as TelegrammSource).AddTelegramm(details);
tableView.ReloadData();
}
}