###現状と問題点
WPFでタスクの進捗状況に従って動くプログレスバーを作成しようとしています。
そこで、ネットを参考にプログラムを作成しています。
現在、エラーが発生してており、どう対処していいのかわかりません。
以下に記載しているソースコードの
「await Task.Run(async () => 」
の箇所です。
エラーメッセージの意味と改善点について教えていただけないでしょうか。
async/await 構文やラムダ式については知ったばかりです。
よろしくお願いいたします。
###エラーメッセージ
await' 演算子は、非同期メソッド内でのみ使用できます。このメソッドに 'async' 修飾子を指定し、戻り値の型を 'Task' に変更することを検討してください。
###ソースコード
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.ComponentModel;
namespace Progress_Ver
{
/// <summary>
/// MainWindow.xaml の相互作用ロジック
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new ViewModel();
}
private void Button_Click(object sender, RoutedEventArgs e) { var vm = this.DataContext as ViewModel; await Task.Run(async () => //△エラーの箇所△ { while (vm.Progress < 100) { vm.Progress += 1; await Task.Delay(10); } }); MessageBox.Show("タスクが完了しました。"); vm.Progress = 0; } }
}
// 進捗を表すための ViewModel
public class ViewModel : INotifyPropertyChanged
{
private int _Progress;
public int Progress
{
get { return this._Progress; }
set
{
this._Progress = value;
this.NotifyProperyChanged(nameof(this.Progress));
}
}
public event PropertyChangedEventHandler PropertyChanged; private void NotifyProperyChanged(string name) { this.PropertyChanged?.Invoke( this, new PropertyChangedEventArgs(name) ); }
}
ーーー<xaml>ーーー
<Window x:Class="Progress_Ver.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Progress_Ver"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<StackPanel
HorizontalAlignment="Center"
VerticalAlignment="Center">
</Window><!-- プログレスバー --> <ProgressBar Width="200" Height="20" Minimum="0" Maximum="100" Value="{Binding Progress}" /> <Button Content="実行" Width="75" Margin="10" Click="Button_Click"/> </StackPanel>
回答1件
あなたの回答
tips
プレビュー