c# - c# await Task.Run 对话框隐藏在我的 WPF 应用程序主窗体后面
问题描述
我有一个 WPFSaraff.Twain
扫描应用程序。要选择我拥有的数据源:
private async void selectButton_Click_1(object sender, EventArgs e)
{
try
{
this.EnabledIO = false; //disable some controls
await Task.Run(() => this._twain32.SelectSource());
} ...
}
twain32.SelectSource
显示一个用于选择数据源的对话框,但该对话框出现在主窗体的后面。
当它尝试从数据源获取图像时也会发生这种情况:
private async void acquireButton_Click_1(object sender, EventArgs e)
{
try
{
this.EnabledIO = false; //disable some controls
await Task.Run(() => this._twain32.Acquire());
_twain32.CloseDSM();
} ...
}
有没有办法把对话框带到前面?我尝试最小化然后最大化主窗体,但如果有另一个应用程序正在运行,它无论如何都会显示在这些应用程序后面。这让用户感到非常困惑,因为看起来应用程序被卡住了,即使任务栏显示还有另一个窗口在等待输入。
非常感谢,请原谅我在这里发帖缺乏经验。
解决方案
不要Task.Run
无缘无故地使用该方法。它仅在您想要在不阻塞 UI 的情况下进行后台工作时有用。后台工作不应与 UI 交互。在您的情况下,该方法显然_twain32.SelectSource
包含与 UI 相关的代码,因此您应该直接调用它:
private async void selectButton_Click_1(object sender, EventArgs e)
{
try
{
this.EnabledIO = false; //disable some controls
this._twain32.SelectSource();
}
}
如果这使您的应用程序的 UI 无响应,那么您俩都有麻烦。你是因为你(可能)必须寻找一个更好的图书馆,图书馆的创建者是因为他们(可能)会失去一个客户。
推荐阅读
- google-sheets - 如何创建一个对不相邻的多个列求和的 ARRAYFORMULA
- r - 从闪亮的应用程序下载文件时如何设置您选择的文件名
- java - 使用 StanfordCoreNLP 管道而不是 AnnotationPipeline 提取日期
- vba - Excel:VBA 代码循环遍历组合框列表并为每个组合框生成 PDF。
- javascript - 使用jQuery在没有URL的窗口中打开PDF
- javascript - 即使填写了正确的凭据,验证也不起作用
- jquery - 下拉列表未显示在剑道网格 detailInit 网格的所有行中
- java - 从数组中获取列值
- reactjs - 无法获取组件状态
- mysql - 是否可以按给定表中的两个字段排序,一个按升序排列,另一个按降序排列?