Метод Form в другом потоке, не вызывающий события - PullRequest
0 голосов
/ 10 июня 2010

Я пытаюсь получить форму обновления.

Я использую библиотеку, чтобы открыть форму при наличии обновленного файла и загрузить с помощью edtFTPNet

ВЯ передаю объект FTP и начинаю загрузку, в FormLoad я обрабатываю два события и использую Thread для StartDownload ().Мои два события никогда не вызывают, я использую их для установки индикатора выполнения.

public partial class UpdateProgressForm : XtraForm
{
    public FTPConnection FtpConn { get; set; }
    public string UpdateFileName { get; set; }

    public UpdateProgressForm()
    {
        InitializeComponent();
    }

    private void OnLoad(object sender, EventArgs e)
    {
        FtpConn.Downloading += FileDownLoading;
        FtpConn.BytesTransferred += FileBytesTransfered;
    }

    private void FileDownLoading(object sender, FTPFileTransferEventArgs e)
    {
        progressBar.Properties.Maximum = (int) e.FileSize;
    }

    private void FileBytesTransfered(object sender, BytesTransferredEventArgs e)
    {
        progressBar.Position = (int) e.ByteCount;
    }

    public void StartDownload()
    {
        FtpConn.DownloadFile(@".\" + UpdateFileName, UpdateFileName);
    }

    private void OnShown(object sender, EventArgs e)
    {
        Thread tt = new Thread(StartDownload) {IsBackground = true};
        tt.Start();
    }
}

Библиотечный метод, вызывающий форму:

private void DownloadUpdateFile(string updateFileName)
{
    using (ProgressForm = new UpdateProgressForm { FtpConn = FtpConn, UpdateFileName = updateFileName })
    {
        ProgressForm.ShowDialog();
    }
}

Любая помощь?Спасибо.

Ответы [ 2 ]

0 голосов
/ 10 июня 2010
  1. Загляните в дизайнер и убедитесь, что вы подписались на эти события
  2. Убедитесь, что вы инстанцируете и показываете из главной темы.
0 голосов
/ 10 июня 2010

Вы уверены, что обработчики событий не вызываются?Я думаю, что ваша проблема скорее в том, что вы пытаетесь обновить индикатор выполнения в рабочем потоке, в котором вызываются обработчики событий (который не является потоком, в котором был создан графический интерфейс).Вы должны убедиться, что обновления GUI выполняются в правильном потоке:

private void FileDownLoading(object sender, FTPFileTransferEventArgs e)
{
    progressBar.Invoke((MethodInvoker) delegate 
    { 
        progressBar.Properties.Maximum = (int) e.FileSize;
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...