-1

インターネットでいくつかの例を見つけましたが、バックグラウンド ワーカー内で非同期呼び出しを実行しようとして苦労しています。私はWP8で働いています。何が欠けていますか?

編集:これの目的は、私が時々読んでいる値を更新することです。1sとしましょう。

これが私の非同期コードです。プロバイダーにいくつかのデータを取得して保存するだけです[]:

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();
        }
4

1 に答える 1

0

わかりました、なんとか機能させました!

非同期コードを時々自動的に実行したい人は、バックグラウンド ワーカーのことは忘れてください。探しているのはタイマーです。タイマーのヒントをくれたServyに感謝します。

asyncCall5秒ごとに呼び出したいとしましょう。

とても簡単です。まず、呼び出し間の待機時間を定義します (同じコードを再度呼び出すまでの待機時間)。

System.Windows.Threading.DispatcherTimer dt = new System.Windows.Threading.DispatcherTimer();
dt.Interval = new TimeSpan(0, 0, 0, 0, 5000); // HERE - for example 5000 is 5 seconds
dt.Tick += new EventHandler(dt_Tick);
dt.Start();

そして、必要なのは、このメソッド内で繰り返したいコードを書くことだけです:

void dt_Tick(object sender, EventArgs e)
{
            asyncCall();
}

この場合、5 秒ごとに が呼び出されますasyncCall

于 2013-06-18T18:23:36.597 に答える