0
私たちはこれを持っていますURL 接続が閉じず、無期限に1秒ごとに応答を送信し続けます。C#で継続的に応答するWebページからデータ(部分)を取得する方法は?
私の現在のコードでは、データを表示する前に接続が終了するまで待っていますが、このWebページが無期限に応答するため、書いたプログラムも無期限に待機します。
しかし、すぐに接続を閉じるwww.google.comなどの他のテストURLでは、正常に動作します。
public partial class Form2 : Form
{
string testurl = "https://live.wh.sportingpulseinternational.com/v1/basketball/read/448426?ak=6eea426648c256cae71a9409352304fe&types=scoreboard,status,boxscore&format=json";
WebClient wc = new WebClient();
public Form2()
{
InitializeComponent();
wc.DownloadDataCompleted += new DownloadDataCompletedEventHandler(DownloadComplete);
}
private void button1_Click(object sender, EventArgs e)
{
wc.DownloadDataAsync(new Uri(testurl));
button1.Enabled = false;
}
private void DownloadComplete(object sender, DownloadDataCompletedEventArgs args)
{
byte[] result = args.Result;
richTextBox1.Text += System.Text.Encoding.Default.GetString(result);
button1.Enabled = true;
}
}
あなたがさらに明確化を持っている場合は、お尋ねください。
は、ここに私のコードです。
ANSWERのUPDATE おかげレベントに、私がやったことは、このようなものです。ここで
私の問題への完全な答えである:このコードは、メッセージを読ん
string testurl = "https://live.wh.sportingpulseinternational.com/v1/basketball/read/448426?ak=6eea426648c256cae71a9409352304fe&types=scoreboard,status,boxscore&format=json";
BackgroundWorker worker = new BackgroundWorker();
public Form2()
{
InitializeComponent();
worker.WorkerSupportsCancellation = true;
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
}
private void button1_Click(object sender, EventArgs e)
{
SetEnabled(button1, false);
worker.RunWorkerAsync();
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
string url = testurl;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
using (WebResponse response = request.GetResponse())
{
using (StreamReader rdr = new StreamReader(response.GetResponseStream()))
{
try
{
while (!rdr.EndOfStream)
{
var str = rdr.ReadLine();
SetText(richTextBox1, str);
}
}
catch (Exception)
{
}
}
}
worker.CancelAsync();
SetEnabled(button1, true);
}
delegate void SetEnabledCallback(Button target, bool value);
private void SetEnabled(Button target, bool value)
{
if (target.InvokeRequired)
{
SetEnabledCallback d = new SetEnabledCallback(SetEnabled);
this.Invoke(d, new object[] { target, value });
}
else
{
target.Enabled = value;
}
}
delegate void SetTextCallback(dynamic target, string text);
private void SetText(dynamic target, string text)
{
if (target.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { target, text });
}
else
{
target.Text += text;
}
}
ありがとう、これは私の問題を解決するのに役立ちました。 – jestrange