【发布时间】:2014-06-05 12:25:40
【问题描述】:
试图找到类似的东西但找不到。
我有一个处理网站 ping 的类(保持活动状态)。 此过程在后台运行,触发 ON/OFF。
当“Pinger”运行时,它应该使用以下数据更新 WPF 文本框: 1.加载开始时间 2.加载完成时间 3.内容长度 以及更多信息。
我无法从后台工作人员访问 TextBox,因为 TextBox 不是静态的。 当我将 TextBox 作为参数发送并从那里更新它时,我收到一个错误,我无法更新 TextBox,因为它正在另一个线程上运行。
主要问题是 BackgroundWorker 一直异步运行,直到手动关闭。
我尝试了 Dispacher,还尝试将 TextBox 作为 Control 作为参数发送并从那里进行编辑。
这是我的 Pinger 课程的 sn-p。谢谢。
class Pinger
{
string urlToPing;
int interval;
BackgroundWorker bw;
public Pinger()
{
urlToPing = Application.Current.Resources["UpdateUrl"].ToString();
interval = int.Parse(Application.Current.Resources["RefreshRate"].ToString());
bw = new BackgroundWorker();
bw.WorkerReportsProgress = true;
bw.WorkerSupportsCancellation = true;
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
}
void bw_DoWork(object sender, DoWorkEventArgs e)
{
PingIt();
while (true)
{
if (bw.CancellationPending)
{
e.Cancel = true;
break;
}
else
{
Thread.Sleep(interval * 1000);
PingIt();
}
}
}
private void PingIt()
{
WebRequest req = HttpWebRequest.Create(urlToPing);
WebResponse response = req.GetResponse();
}
public void Start(Control lastUpdateC, Control timeTakenC)
{
bw.RunWorkerAsync();
}
public void ShutDown() {
bw.CancelAsync();
}
}
【问题讨论】:
标签: c# wpf backgroundworker