相关疑难解决方法(0)

async/await - 何时返回Task vs void?

在什么情况下会想要使用

public async Task AsyncMethod(int num)
Run Code Online (Sandbox Code Playgroud)

代替

public async void AsyncMethod(int num)
Run Code Online (Sandbox Code Playgroud)

我能想到的唯一情况是,您是否需要能够跟踪其进度的任务.

此外,在以下方法中,async和await关键字是否不必要?

public static async void AsyncMethod2(int num)
{
    await Task.Factory.StartNew(() => Thread.Sleep(num));
}
Run Code Online (Sandbox Code Playgroud)

c# asynchronous .net-4.5

457
推荐指数
5
解决办法
28万
查看次数

绑定按钮单击一个方法

我有一个数据网格绑定到一个可观察的对象集合.我想要做的是有一个按钮,它将执行一个对象的方法,该对象表示被点击的按钮行.所以我现在拥有的是这样的:

            <DataGridTemplateColumn Header="Command">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Button Name="cmdCommand" Click="{Binding Command}" 
                                Content="Command"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)

哪个不起作用并报告以下错误:

Click ="{Binding Command}"无效.'{Binding Command}'不是有效的事件处理程序方法名称.只有生成的或代码隐藏类上的实例方法才有效.

我看过命令绑定,但看起来它最终会转到单个外部命令而不是绑定到行的对象.我让它在后面的代码上使用事件处理程序,然后将其路由到绑定到所选行的项目(因为在单击按钮时行被选中),但这似乎很难处理这个并且我认为我'我只是遗漏了一些东西.

wpf

49
推荐指数
3
解决办法
13万
查看次数

async Task vs async void

这可能是一个非常愚蠢的问题,但我有以下编码行将RAW图像转换为BitmapImages:

public async void CreateImageThumbnails(string imagePath, int imgId)
{
    await Task.Run(() => controlCollection.Where(x => x.ImageId == imgId).FirstOrDefault().ImageSource = ThumbnailCreator.CreateThumbnail(imagePath));
}
Run Code Online (Sandbox Code Playgroud)

它调用这种方法 CreateThumbnail()

public static BitmapImage CreateThumbnail(string imagePath)
{
    var bitmap = new BitmapImage();

    using (var stream = new FileStream(imagePath, FileMode.Open, FileAccess.Read))
    {
        bitmap.BeginInit();
        bitmap.DecodePixelWidth = 283;
        bitmap.CacheOption = BitmapCacheOption.OnLoad;
        bitmap.StreamSource = stream;
        bitmap.EndInit();
    }

    bitmap.Freeze();

    GC.WaitForPendingFinalizers();
    GC.Collect();

    return bitmap;
}
Run Code Online (Sandbox Code Playgroud)

当使用async Void而不是async Task在我的CreateImageThumbnails方法中时,我的应用程序处理图像(其中29个)比快11秒async Task.为什么会这样?

异步无效 异步无效

异步任务 异步任务

内存使用更加使用void,但操作完成快.我对线程知之甚少,这就是我提出这个问题的原因.有人可以解释为什么会这样吗?

我还做了一些关于什么时候和什么时候不使用的研究 …

c# task void async-await

15
推荐指数
1
解决办法
5396
查看次数

标签 统计

c# ×2

.net-4.5 ×1

async-await ×1

asynchronous ×1

task ×1

void ×1

wpf ×1