2

C# デスクトップ Windows フォーム アプリケーションがあります。

3 秒ごとに Web サービスへの呼び出しを呼び出して、サーバー上のディレクトリ内のメッセージをチェックしています。

while (true)スレッドによって開始されたループがあります。このループ内で、Web サービスへの呼び出しが行われます。無限ループを回避する必要があることはわかっていますが、クライアントに新しいメッセージをタイムリーに通知する簡単な方法がわかりません。

私が見ることができる代替手段はありますか?

ありがとう!

4

2 に答える 2

1

これにはおそらく aBackgroundWorkerを使用できます -チュートリアル

while(true) ループを使用する必要がありますが、BackgroundWorker の ReportProgress メソッドを使用してクライアントと通信できます。

// start the BackgroundWorker somewhere in your code:
DownloadDataWorker.RunWorkerAsync(); //DownloadDataWorker is the BackgroundWorker

DoWork次に、およびのハンドラを記述します。ProgressChanged

private void DownloadRpdBgWorker_DoWork(object sender, DoWorkEventArgs e)
{
    BackgroundWorker worker = sender as BackgroundWorker;
    while (true)
    {
        worker.ReportProgress(1);
        if (!controller.DownloadServerData())
        {
            worker.ReportProgress(2);
        }
        else
        {
            //data download succesful
            worker.ReportProgress(3);
        }
            System.Threading.Thread.Sleep(3000); //poll every 3 secs
    }
}

private void DownloadRpdBgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    switch(e.ProgressPercentage){
        case 1: SetStatus("Trying to fetch new data.."); break;
        case 2: SetStatus("Error communicating with the server"); break;
        case 3: SetStatus("Data downloaded!"); break;
    }
}
于 2014-04-05T18:02:47.050 に答える