-1
我在互聯網上發現了一些例子,但我很難嘗試在後臺工作者中運行我的異步調用。我正在WP8工作。少了什麼東西?在backgroundworker中運行異步代碼
編輯:這個的目的是更新我不時閱讀的值。讓我們說1秒。
這裏是我的異步代碼,它只是獲取並存儲在提供商[]一些數據:
public void getAllProvidersMethod()
{
try
{
sc.getAllProvidersCompleted += new EventHandler<ServiceReference1.getAllProvidersCompletedEventArgs>(callback);
sc.getAllProvidersAsync();
}
catch (System.Exception e)
{
MessageBox.Show(e.ToString());
}
}
public void callback(object sender, ServiceReference1.getAllProvidersCompletedEventArgs e)
{
try
{
providers = new String[e.Result.Length];
for (int i = 0; i < e.Result.Length; i++)
{
providers[i] = e.Result[i].ToString();
}
}
catch (System.Exception d)
{
MessageBox.Show(d.ToString());
}
}
這是我的後臺工作:
private void networkWorker()
{
var obj = App.Current as App;
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += new DoWorkEventHandler(
delegate(object o, DoWorkEventArgs args)
{
BackgroundWorker b = o as BackgroundWorker;
getAllProvidersMethod();
});
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(
delegate(object o, RunWorkerCompletedEventArgs args)
{
MessageBox.Show(" ");
});
bw.RunWorkerAsync();
}
爲什麼如果您的操作是異步的,您完全可以使用BGW? BGW的主要目的是長時間運行* CPU綁定*工作。由於您使用的方法不會阻止UI線程,只需從UI線程直接執行。 – Servy
@Servy是的,但我想更新我正在閱讀的值。讓我們說1秒。所以我想過把它放到後臺工作。可能嗎?或者有另一種方式? – sparcopt
你不想在這裏使用BGW。它的目的不是爲了幫助你做到這一點。你可能能夠做任何你想做的事情,但是你還沒有告訴我們你真正想用這種異步方法做什麼,而你目前做不到。賠率是,如果可能的話,它不會利用BGW來做到這一點。 – Servy