首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在以Task.Run开头的方法中调用ShowDialog安全吗?

在以Task.Run开头的方法中调用ShowDialog是不安全的。

Task.Run方法用于在后台线程上执行操作,而ShowDialog方法是一个阻塞的方法,它会创建一个模态对话框并等待用户的响应。在后台线程上调用ShowDialog可能会导致一些问题,例如界面冻结、死锁等。这是因为ShowDialog方法需要在UI线程上执行,以便正确处理用户交互和更新UI。

如果需要在后台线程上执行操作并显示对话框,可以考虑使用异步编程模型(Async/Await)来替代Task.Run。通过使用异步方法,可以在后台线程上执行操作,而不会阻塞UI线程。例如,可以使用Dispatcher.InvokeAsync方法将显示对话框的操作调度到UI线程上。

总结起来,为了确保安全性和良好的用户体验,建议在UI线程上调用ShowDialog方法,避免在以Task.Run开头的方法中调用ShowDialog。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

vuehtml标签{{}}内可以调用函数方法

今天领导提个需求,要求金额上强制保留两位小数,本想着后台直接返回数据时,带着两位小数,前端只是做个显示作用,后台说保留了小数但在传输过程中去掉了,可能他们做了格式转化。...没办法了只能又是我们前端操作了,牵扯价钱太多了,很多时候又有for 循环,怎么办呢? 思路:{{}}里面的是一个表达式,可不可以是个函数呢?...经测试是可以,具体实现方法如下: 写一个公共强制保留两位小数js方法 function toDecimal2 (x) { var f = parseFloat(x) if (isNaN(f....' } while (s.length <= rs + 2) { s += '0' } return s } export default { toDecimal2 } main.js...引用: import newPrice from '.

30.5K20

结构变量作为方法参数调用方法内部使用“坑”你遇到过

很久没有写博了,今天一个同学问结构变量问题,问结构到底是传递值还是传递引用。查过MSDN都知道,结构默认是传递值,因此方法内部,结构值会被复制一份。...一般来说,数组参数传递是引用,那么数组元素呢?它是被复制还是被引用?如果结构数组元素象结构变量那样也是复制,那么对于方法调用内存占用问题,就得好好考虑下了。...,分别传值和传引用方式来调用结构变量: static void TestStruc(Point p) { p.X++;...,引用传递结构变量,它值被改变了: Struct Pont(X,Y) Test: call by value Point X=1,Y=2 call by ref Point X=2,Y=3 下面,...往往有时候,我们为了敲代码方便,少写几个字,便定义一个临时变量去引用原来变量,而这种行为,对于操作结构变量,无疑是一个最大坑,这个坑,你遇到过

2.5K100

关于使用MethodHandle子类调用祖父类重写方法探究

关于使用MethodHandle子类调用祖父类重写方法探究 注:这个例子原本出现在周志明先生《深入理解Java虚拟机》--虚拟机字节码执行引擎章节,介于有读者朋友有疑问,这里基于Java代码层面解释一下...由于找到thinking方法是非static,需要一个隐式入参(也就是栈帧中局部变量表第0个位置this参数),java这叫做该方法接收者。...普通方法调用,这个this参数是虚拟机自动处理,表示是当前实例对象,我们方法可以直接使用。...但是我们这个MethodHandle例子,相当于是模拟了invoke*指令处理,手动调用invoke方法就需要指定这个"this"参数。...我觉得使用bindTo绑定方法接收者要比invoke方法传递更加友好,也更加符合程序员大众理解,invoke可以只专注方法显式入参。 然后再来说bindTo(this)this。

9.4K30

Linux 永久并安全删除文件和目录方法

引言 大多数情况下,我们习惯于使用 Delete 键、垃圾箱或 rm 命令从我们计算机删除文件,但这不是永久安全地从硬盘(或任何存储介质)删除文件方法。...2.wipe – Linux 安全删除文件 wipe 命令可以安全地擦除磁盘文件,从而不可能恢复删除文件或目录内容。 首先,你需要安装 wipe 工具,运行以下适当命令: ?...安装完成后,你可以使用 srm 工具 Linux 安全地删除文件和目录。 ? 下面是使用选项: ? ? 阅读 srm 手册来获取更多使用选项和信息: ?...4.sfill -安全免费磁盘 / inode 空间擦除器 sfill 是 secure-deletetion 工具包一部分,是一个安全免费磁盘和 inode 空间擦除器,它以安全方法删除可用磁盘空间中文件...5.sswap – 安全 swap 擦除器 它是一个安全分区擦除器,sswap 安全方式删除 swap 分区上存在数据。 警告:请记住在使用 sswap 之前卸载 swap 分区!

4.5K50

C++反射调用.NET(一) 反射调用第一个.NET类方法

为什么要在C++调用.NET 一般情况下,我们常常会在.NET程序调用C/C++程序,使用P/Invoke方式进行调用,在编写代码代码时候,首先要导入DLL文件,然后根据C/C++头文件编写特殊...extern int Multiply(int factorA, int factorB); 详细过程,可以参考之前我这篇文章:《C#调用C和C++函数一点区别》 有时候,我们也会有C++调用...注意,本文说C++反射调用,不是对C++自身进行封装反射功能,而是C++/CLI代码反射调用.NET代码,原理上跟你.NET应用反射调用另外一个.NET程序集一个道理。...C++,类成员用 -> 符号调用,命名空间或者类静态成员,用::调用,例如上面的构造函数代码: Assembly^ ass = Assembly::LoadFrom(this->assemblyFile...C++/CLI中使用反射 反射调用第一个.NET类方法 下面的方法,将会反射调用 User类一个最简单方法 : public int GetUserID(string IdString){} 该方法只有一个一个参数和一个简单返回值

3.2K100

没想到吧,PHP 外部也可以调用私有方法

一般来说, Class 外部是无法调用私有方法,这也是 Private 字面的意思,但是一些很特殊很特殊情况下,如果需要调用,是否可以呢?其实可以使用类反射来实现。...reflection->getClosure($object); } return call_user_func_array($callback, $args); } 简单解释一下,首先还是简单判断该方法是否存在...,接着获取对象方法放射,然后判断一下是不是公共方法,如果是公共就正常调用,不是则获取其闭包,最后使用回调方式来调用。...这个函数可以让你调用对象私有或者受保护方法,建议一些特殊情况下才使用。为了方便大家调用,新版 WPJAM Basic 也会集成该函数。----

1K30

.NET执行AsyncAwait两种错误方法

.NET执行异步/等待两种错误方法 应用开发,我们为了提高应用程序吞吐能力或者异步操作来减少耗时,通常会使用多线程来达到目的,而在C#语言中由于async/await必杀技存在,大多会使用此来简化多线程操作...而且并发下,以上使用方式在工作也极大降低了系统性能! 解决方案可以简化为:不要对同步方法使用异步包装器!只需同步调用它们即可。...过度使用Task.Run()有很大安全隐患,尤其在你未搞懂你写了什么时候,这种影响复杂业务和超大并发下出问题非常难排查!...总之应该记住两件事: 不要将异步任务包装在另一个异步包装器Task.Run。 不要在同步调用上使用异步包装器。 有很多方法可以修正使用异步/等待ASP.NET代码。...Task.Run)

1.3K10

【Kotlin 协程】Flow 异步流 ① ( 异步返回返回多个返回值 | 同步调用返回多个值弊端 | 尝试 sequence 调用挂起函数返回多个返回值 | 协程调用挂起函数返回集合 )

文章目录 一、异步返回返回多个返回值 二、同步调用返回多个值弊端 三、尝试 sequence 调用挂起函数返回多个返回值 四、协程调用挂起函数返回集合 一、异步返回返回多个返回值 ----... Kotlin 协程 Coroutine , 使用 suspend 挂起函数 异步方式 返回单个返回值肯定可以实现 , 参考 【Kotlin 协程】协程挂起和恢复 ① ( 协程挂起和恢复概念...SequenceScope 对象方法 ; 该匿名函数 , 不能调用 SequenceScope 之外定义挂起函数 , 这样做是为了保证该类执行性能 ; /** * 构建一个[Sequence...SequenceScope 类上 , 有一个 @RestrictsSuspension 注解 , RestrictsSuspension 注解作用是 限制挂起 , 该类不能调用其它挂起函数 ,...---- 如果要 异步方式 返回多个返回值 , 可以协程调用挂起函数返回集合 , 但是该方案只能一次性返回多个返回值 , 不能持续不断 先后 返回 多个 返回值 ; 代码示例 : package

8.2K30

python接口测试:一个用例文件调用另一个用例文件定义方法

简单说明 进行接口测试时,经常会遇到不同接口间传递参数情况,即一个接口某个参数需要取另一个接口返回值; 平常写脚本过程,我经常会在同一个py文件,把相关接口调用方法都写好,这样同一个文件能够很方便进行调用...; 后来随着功能增多,写其他py文件时,有时也会先调用某个相同接口来获取参数; 如果在每个py文件中都写一遍调用某个接口方法,会显得很啰嗦,也不好维护,并且以后万一提供数据那个接口发生变化...,需要调整很多地方; 所以,当我们一个用例py文件写好某个接口调用方法,后续如果在其他py文件也要用到这个接口返回值,则直接引用先前py文件定义好接口调用方法即可。...:CreateActivity, 继承自unittest.TestCase 然后setUp方法中进行了一些必要初始化工作 最后创建了一个名为push_file_download方法,它作用就是调某个接口...id,这个id就是由test_A.py文件CreateActivity类下 push_file_download 方法生成; 所以这里要先调用push_file_download方法,对应第

2.8K40

Winform 进度条弹窗和任务控制

);然后是主测试方法(一个按钮点击事件方法一些信息设置: 然后设置 CancellationTokenSource 对象 Token,给它注册一个取消任务时调用委托方法,里面先等待同步信号结果再进行本次执行结果判断...: 接下来订阅弹窗那两个事件,执行操作事件开启任务,并传递 Token;中止事件停止任务: 需要注意是,停止任务后,任务内部并不会自己停止,需要判断 Token IsCancellationRequested...然后,因为之前注册取消委托方法,进行了等待,所以我们执行完业务方法(BusinessMethod)并设置好相关状态值后,需要判断任务是否取消,如果取消,说明注册取消委托方法已经等待了,...这是因为,比如在一轮循环中,已经执行过了开头是否已取消判断(IsCancellationRequested 为 false),开始执行耗时业务方法了,此时用户点击中止按钮,IsCancellationRequested...继续流程,接下来模态框方式弹出窗口,并获取结果。业务处理方法模拟了耗时操作并返回是否成功。

1.6K20

一日一技:Python双下划线私有方法不能被调用原理

不过你可能会强行解释为:子类 __init__里面,有一行 super().__init__(),这个地方可能子类还没有完全覆盖父类,所以先运行了父类方法。...这是因为,Python里面,类方法或者属性如果双下划线开头,那么他们就是类私有方法,在被继承时候,即使子类有相同名字双下划线开头属性或者方法也不会覆盖父类。...而且这些双下划线开头私有方法或者属性,类内部可以自由被其他方法调用,但是实例对象里面是不能直接调用,如下图所示: 那么Python是如何实现这一点呢?...__calc_age就是子类 __calc_age。..._PeopleInfo__calc_age() # 强行调用子类私有方法 kingname._Info__calc_age() # 强行调用父类私有方法 运行效果如下图所示: ?

1.6K30

WPF 设置资源字典多线程安全读写方法

WPF ,使用 ResourceDictionary 本身不会受到创建线程同步影响,意味着可以在任意线程创建 ResourceDictionary 资源字典,然后在任意线程使用。...但是此时读写需要有时间上差距,否则将会多线程读写不安全。...设置和读取之间有时间差 设置之后就可以进行多线程开始安全写入,而没有设置之前依然是允许一个线程写一个线程读。...如下面的测试代码,调用 AddAndGetValue_OnClick 方法时候,用不是线程安全,而调用 AddAndGetValueWithCanBeAccessedAcrossThreads_OnClick...XAML 里面使用 StaticResourceExtension 也就是 {StaticResource xx} 方法获取时候,将会调用到 Contains 方法

56020

C#语法——await与async正确打开方式

这也就是为什么大家不怎么用他们原因。这个循环很讨厌,那么怎么破除这个循环呢? 【很简单,await等待是线程,不是函数。】 不理解?没关系,接着看下去。...目的是为了让这个方法这样被调用 await AsyncTest(),但直接这样调用,并不会开启线程,那这样费劲修饰是不是就没什么意义了呢。...然后,此时再调用await AsyncTest(),你会神奇发现,依然没有卵用。。。 Excute方法正常执行,而AsyncTest内运行线程,自己执行自己。...可以明确看到,第二组,线程重新回到了主线程1,而第一组,已经被优化到了线程4。  ...这也是官方为什么只提供了await调用服务例子,因为,程序内调用,await还是要了解后,再使用,才安全

1K30

设计模式学习-单例模式

,的确,挺简单,这就是单例模式其中之一饿汉模式,什么意思呢, 饿汉模式:程序启动或单例类被加载时,就实例化单例模式 但是这么做不感觉有问题?...假如这个类我们并不使用或在程序启动很久以后我们才使用,那么这个对象预创建不就很浪费?并且如果这个对象创建需要很大资源,那....,所以我们需要延迟单例对象创建....C#单例另一种实现---延迟加载 C#中有一个Lazy类,这个类是一个延迟加载类,也就是自动为我们实现延迟加载功能,并且还是线程安全,也就是说完全可以利用这个类实现单例 class SingletonLazy...源码,可以看到Lazy也只是利用了一个内部类Boxed对象缓存了数据,代码中有一点有意思,LazyInitValue()方法中使用了Volatile类读取数据进行加锁,volatile是保持多线程下数据同步问题...volatile就是为了解决这个问题;volatile修饰变量,不允许线程进行本地缓存,每个线程读写都直接操作共享内存上,这就保证了变量始终具有一致性 单例模式定义 单例模式保证系统中一个类仅有一个实例对象

50630
领券