[英]EventArgs data usage
我有三個類, FileManagerClass
包含兩個事件,即EventHandler<FileTransferEventArgs> FileMove
和EventHandler<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 中的屬性來顯示移動的文件名,無論它是否成功,並提供將在消息屬性中的原因。
但是,當我把所有東西都連接起來時,我無法查看傳遞的數據。 我不確定我是否不正確地使用了這些事件,或者我正在嘗試做一些不可能的事情。
FileMove
和FileMoveError
事件必須放在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.