c# - OpacityMask 无法按预期在 C# 代码中工作

标签 c# wpf

private void Module_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)      
{
   // new SolidColorBrush(Color.FromArgb(32, 0, 0, 0)) belongs to black  color

   LayoutRoot.OpacityMask =  new SolidColorBrush(Color.FromArgb(32, 0, 0, 0));

   // Some code over here...

}

第一个语句是更新名为 LayoutRoot 的网格的 OpacityMask。 这里第一个语句之后的代码是一个很大的过程,大约需要一分钟或更长时间才能执行。 但不透明度蒙版只会在执行此事件后一分钟后更改背景,即页面的不透明度。在此处输入代码 请帮助我,以便在执行大约 1 分钟或更多分钟的长代码之前运行不透明蒙版。

最佳答案

事件处理程序方法中的代码会阻塞 UI 线程。

声明处理程序方法异步,并在任务操作中调用长时间运行的代码:

private async void Module_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)      
{
    LayoutRoot.Opacity = 0.125;

    await Task.Run(() =>
    {
        // long running code...
    });

    LayoutRoot.Opacity = 1;
}

关于c# - OpacityMask 无法按预期在 C# 代码中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48805044/

相关文章:

c# - 如何正确居中 WPF Canvas ?

来自 c dll 的 c# 回调,指向 c# 类的指针 arg

wpf - 触发器上的属性不能为空

c# - 当 TabControl 绑定(bind)到 ViewModels 时 WPF 变慢

.net - 在 WPF 中创建透明背景

c# - 为什么 StackPanel 不垂直拉伸(stretch)它的子项?

wpf - 在向用户呈现验证错误之前创建延迟

c# - 我如何为 SWIG 定义类型映射,将引用参数从 C++ 转换为 C#

winforms 中的 C# listview 不显示添加的项目

c# - 领域服务的最佳设计