-1

スレッドで tcp ポートが使用可能かどうかを確認するにはどうすればよいですか? バックグラウンド ワーカー スレッドを使用してみましたが、機能しましたが、更新がかなり遅くなりました。進行状況を UI スレッドに報告したいと考えています。これは正しい方法ですか?

    BackgroundWorker authStatus = new BackgroundWorker {WorkerReportsProgress = true};
    authStatus.DoWork += AuthStatusWork;
    authStatus.ProgressChanged += AuthStatusProgressChanged;

    public void AuthStatusWork(object sender, EventArgs e)
    {
        var thread = sender as BackgroundWorker;

        using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
        {
            socket.SendTimeout = 3;
            while (true)
            {
                try
                {
                    socket.Connect(auth[0], Convert.ToInt32(auth[1]));
                    if (thread != null) thread.ReportProgress(1);
                }
                catch (SocketException ex)
                {
                    if (ex.SocketErrorCode != SocketError.ConnectionRefused &&
                        ex.SocketErrorCode != SocketError.TimedOut) continue;
                    if (thread != null) thread.ReportProgress(0);
                }
            }
        }
    }

    public void AuthStatusProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        switch (e.ProgressPercentage)
        {
            case 0:
                AuthStatus.Foreground = Brushes.Red;
                AuthStatus.Content = "Offline";
                break;
            case 1:
                AuthStatus.Foreground = Brushes.Green;
                AuthStatus.Content = "Online";
                break;
        }
    }
4

2 に答える 2

0

リモートサーバーのポートをチェックして、接続できるかどうかを確認しようとしています。

というわけで接続してみる。何らかの方法で未来を予測しようとするこれらのゲームは無意味です。接続を試行し、エラーを処理します。これはどのリソースにも当てはまります。利用可能なリソースがあるかどうかを確認する最善の方法は、実際に使用してみることです。

于 2013-08-16T09:42:13.237 に答える