0

ここで実行されている UDP リスナーを停止しようとしていBackgroundWorker;ますが、コードは次のとおりです。

  private void bw_DoWork(object senderx, DoWorkEventArgs e)
    {
        BackgroundWorker worker = senderx as BackgroundWorker;

        while(true)
        {
            Debug.WriteLine("run");
            if ((worker.CancellationPending == true))
            {
                Debug.WriteLine("cancel pending");
                e.Cancel = true;
                newsock.Close();
                serverStatus = false;
                break;
            }
            else
            {
                try
                {
                    Debug.WriteLine("waiting for reponse..");
                    data = newsock.Receive(ref sender);
                    (STUCK HERE IF NO RESPONSE)

基本的に、UDP の応答が得られないと、受信ループに陥り、呼び出しbw.CancelAsync()がチェックされません。

この問題を解決するにはどうすればよいですか

4

1 に答える 1

0

非同期呼び出しと同期呼び出しを混在させています。受信を非同期にするか、CancelAsync()関数をオーバーロードしてソケットも閉じる必要があります (これにより、受信呼び出しが返されます)。

関数をオーバーロードできない場合はCancelAsync()、ソケットを閉じて を呼び出すカスタム キャンセル関数を作成できますCancelAsync()

于 2013-03-24T17:10:01.173 に答える