1

ボタンがクリックされたときにc#でサーバーとクライアント間でファイルをコピーしようとしています。コピー中にフォームが動かなくなってほしくないので、バックグラウンドワーカーを使用したいと思います。私はこのコードを持っています:

    private void connectBtn_Click(object sender, EventArgs e)
    {
         if (!isConnected)
         {
             clientSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
             connectBtn.Text = "Disconnect From Server";
             connectBtn.Refresh();
             clientSock.Connect(remoteIpAddress, remotePort);
             statusColor.BackColor = Color.Green;
             statusColor.Refresh();
             isConnected = true;
             buttonAddDirectory.Enabled = true;
             buttonAddFile.Enabled = true;
             var bg = new BackgroundWorker();
             bg.DoWork += (sender, e) => copyDllsToServer();

             bg.RunWorkerAsync();
             if (backgroundWorker.IsBusy != true)
                 backgroundWorker.RunWorkerAsync();
         }
     }

コピー関数は、copyDllsToServer()です。

これを行うと、次のエラーが発生しますA local variable named 'sender' cannot be declared in this scope because it would give a different meaning to 'sender', which is already used in a 'parent or current' scope to denote something else。どうすれば解決できますか?

複数のクライアントが実行する場合、これBackgroundWorkerは正しく機能しますか?

4

1 に答える 1

1

使用する

bg.DoWork += (sender1, e) => copyDllsToServer(sender1, e);
                    ^_____________

それ以外の

bg.DoWork += (sender, e) => copyDllsToServer();

またはメソッドグループを次のように使用します

bg.DoWork += copyDllsToServer;

Socketクラスの非同期メソッドを使用しないのはなぜですか?

このSocketクラスは、非同期プログラミングモデル(APM)パターンを実現します。で始まるソケットメソッドを調べBegin/Endます。

于 2013-02-03T11:57:15.977 に答える