小编Rox*_*Rox的帖子

线程停止执行其工作

我们有一个 C# 应用程序,它连接到 FTP 服务器、下载一些文件、断开连接,并在一段时间后(由用户通过 UI 选择)重新连接并重复该过程。我们使用BackgroundWorker 实现了这一点,但我们注意到,运行较长时间后,程序停止在UI 和日志文件中记录其操作。那时,没有文件可供它下载,因此我们上传了一些文件,它恢复了活动,就好像什么也没发生一样。

问题是普通用户无法知道程序仍在运行,因此我们决定使用我们自己的线程来实现它。我们做了一个更简单的程序,以排除任何其他问题,这个程序只连接到 FTP 并断开连接。它像BackgroundWorker 一样停止显示消息(2 小时后一次,22 小时后一次,没有我们能找到的任何模式,并且在一台没有执行任何其他操作的计算机上)。

DoFTPWork += new DoFTPWorkDelegate(WriteFTPMessage);

FTPWorkThread = new Thread(new ParameterizedThreadStart(Process));

//seData is the FTP login info
FTPWorkThread.Start(seData);
Run Code Online (Sandbox Code Playgroud)

FTP方法是:

private void Process(object seData1)
{
    seData = (SEData)seData1;
    while (!stopped)
    {
        try
        {
            ftp = null;
            ftp = new FTP_Client();

            if (ftp.IsConnected)
            {
                logMessages += DateTime.Now + "\t" + "info" + "\t" + "Ftp disconnected from " + seData.host + "\r\n";
                ftp.Disconnect();
            }

            ftp.Connect(seData.host, 21);
            ftp.Authenticate(seData.userName, seData.password);
            logMessages …
Run Code Online (Sandbox Code Playgroud)

c# multithreading backgroundworker

3
推荐指数
1
解决办法
2820
查看次数

标签 统计

backgroundworker ×1

c# ×1

multithreading ×1