簡體   English   中英

EventArgs 數據使用情況

[英]EventArgs data usage

我有三個類, FileManagerClass包含兩個事件,即EventHandler<FileTransferEventArgs> FileMoveEventHandler<FileTransferEventArgs> FileMoveError

然后,我有一個名為FileTransferEventArg的自定義EventArgs class,它繼承自基本EventArgs class。 我有第三個 class 稱為FolderDirectoryModel然后偵聽要引發的事件並使用OnFileMove(object sender, FileTransferEventArg arg)OnFileMoveError(object sender, FileTransferEventArg arg)對其進行響應。

總的來說,它看起來像這樣:

class FileTransferManager
{
    public event EventHandler<FileTransferEventArgs> FileMove;
    public event EventHandler<FileTransferEventArgs> FileMoveError;
}

public class FileTransferEventArgs : EventArgs
{
    string FileName { get; set; }
    string Message { get; set; }

    internal FileTransferEventArgs(FileModel file, string message)
    {
        this.FileName = file.FileName;
        this.Message = message;
    }
}

public class FolderDirectoryModel
{
    void TransferFile(FileModel toBeTransfered, string destinationPath)
    {
        if (!File.Exists(toBeTransfered.FilePath))
        {
            File.Move(toBeTransfered.FilePath, destinationPath);
            FileTransferEvents.FileTransferManager TransferAgent = new FileTransferEvents.FileTransferManager();
            TransferAgent.FileMove += new EventHandler<FileTransferEventArgs>(OnFileMove);                
        }
        else
        {
            FileTransferEvents.FileTransferManager TransferAgent = new FileTransferEvents.FileTransferManager();
            TransferAgent.FileMoveError += new EventHandler<FileTransferEventArgs>(OnFileMoveError);
        }
    }

    //Handler Methods
    private void OnFileMoveError(object sender, FileTransferEventArgs args)
    {
        //what i want to happen

        MessageBox.Show($"File {args.FileName} has not been moved succefully to {args.FilePath} because of....");
    }

    private void OnFileMove(object sender, FileTransferEventArgs args)
    {
        //what i want to happen
        MessageBox.Show($"File {args.FileName} has been moved successfully to {args.FilePath}
    }
}

我的問題是我想使用FileTransferEventArgs class 中的屬性來顯示移動的文件名,無論它是否成功,並提供將在消息屬性中的原因。

但是,當我把所有東西都連接起來時,我無法查看傳遞的數據。 我不確定我是否不正確地使用了這些事件,或者我正在嘗試做一些不可能的事情。

FileMoveFileMoveError事件必須放在FolderDirectoryModel class 中。

事件在同一個 class 中觸發。 使用Invoke方法。

public class FileTransferEventArgs : EventArgs
{
    public string FileName { get; }
    public string FilePath { get; }
    public string Message { get; }

    internal FileTransferEventArgs(FileModel file, string message)
    {
        FileName = file.FileName;
        FilePath = file.FilePath;
        Message = message;
    }
}

public class FileModel
{
    public string FileName { get; set; }
    public string FilePath { get; set; }
}

public class FolderDirectoryModel
{
    public event EventHandler<FileTransferEventArgs> FileMove;
    public event EventHandler<FileTransferEventArgs> FileMoveError;

    public void TransferFile(FileModel fileModel, string destinationPath)
    {
        if (!File.Exists(fileModel.FilePath))
        {
            File.Move(fileModel.FilePath, destinationPath);
            var fileTransferEventArgs = new FileTransferEventArgs(fileModel, "Success");
            FileMove?.Invoke(this, fileTransferEventArgs);
        }
        else
        {
            var fileTransferEventArgs = new FileTransferEventArgs(fileModel, "Cannot move");
            FileMoveError?.Invoke(this, fileTransferEventArgs);
        }
    }
}

用法

var fileModel = new FileModel { FileName = "name", FilePath = "path" };

var folderDirectoryModel = new FolderDirectoryModel();
folderDirectoryModel.FileMove += FolderDirectoryModel_FileMove;
folderDirectoryModel.FileMoveError += FolderDirectoryModel_FileMoveError;

folderDirectoryModel.TransferFile(fileModel, "destPath");

void FolderDirectoryModel_FileMove(object sender, FileTransferEventArgs args)
{
    MessageBox.Show($"File {args.FileName} has been moved successfully to {args.FilePath}");
}

void FolderDirectoryModel_FileMoveError(object sender, FileTransferEventArgs args)
{
    MessageBox.Show($"File {args.FileName} has not been moved to {args.FilePath} because of {args.Message}");
}

事件處理程序位於創建和使用FolderDirectoryModel實例的同一代碼中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM