c# - C#如何在另一个窗口中获取一个窗口的加载状态?
问题描述
我正在用 c# 在 wpf 中编写一个包含两个窗口的程序。一个命名MainWindow
,另一个命名SubWindow
。
MainWindow 包含一个按钮和一个文本块。单击按钮时,将显示子窗口。
SubWindow 包含从磁盘上的图像和视频文件嵌入到其中的几个图像和视频 (MediaElement)。因此,当子窗口加载时,它也会从磁盘加载图像和视频。这需要一段时间。所以我希望用户知道当前在 SubWindow 中加载的图像和视频文件的文件名。我想通过在 MainWindow 的文本块中显示正在加载的文件名来实现这一点。总而言之,当单击 MainWindow 上的按钮时,会加载子窗口,并且 MainWindow 中的文本块会显示子窗口中当前正在加载的文件的文件名,并且一旦加载了所有文件,文本块就会显示消息“所有文件已成功加载”。我如何实现这一目标?
解决方案
您可以使用事件。
要注册一个新事件,请将以下代码放在您的子窗口顶部
[Browsable(true)]
[Category("Action")]
public event EventHandler<string> MyFilesLoaded;
当您的代码加载文件时,会引发这样的事件。您可以根据需要多次提出事件。
string f = "abc.doc,123.xls";
EventHandler<string> handler = MyFilesLoaded;
handler?.Invoke(null, f);
当然,您可以传递一个列表而不是字符串。
在您的主窗口注册事件:
public MainWindow()
{
SubWindow.MyFilesLoaded+= DoSomething;
}
并在触发时处理事件:
private void DoSomething(object sender, string files)
{
mynicetxt.Text = files;
}
推荐阅读
- flutter - 如何在 Flutter 的 TextFormField 中设置前缀垂直对齐?
- ruby-on-rails - NotImplementedError: fork() 函数在这台机器上没有实现
- python - 如何在 tensorflow 2 中使用类权重进行多标签二元分类?
- winforms - Google Oauth2 同意屏幕允许按钮已禁用
- google-apps-script - 用相同的公式覆盖随机值的公式。价值不变?
- jenkins - Jenkins 升级 - TFS 代理未能将构建作业排队
- pdfbox - NumberFormat 语言环境导致 PdfBox / Boxable 中的错误
- sql - 哪些数据库具有像 Oracle 一样的 databaselink?
- awk - AWK 比较两个文件并打印带有 IP 地址的匹配列
- java - 在 Android 中通过蓝牙同时发送和接收数据