私はこの質問を数回はしましたが、一度もそれを得ることはできませんでした。うまくいけば、誰かが私がプログラミングとC#を初めて勉強しているときに助けてくれるはずです。タスクメソッドを使用して、各タスク/行のDataGrid/listviewの行を更新します。
私は、このようなTask ID
やTask Status
などいくつかの値でDatagrid
(以前にリストビュー)を移入し、その後Task<List>
にTasks
を追加し、ボタンを持っています。各Task
には、と同じmethod
が含まれており、対応するStatus
をそのTask index
に更新するはずです。
以下を参照してください。
マイリストビュー:
namespace Something
{
public class listView
{
private static ObservableCollection<listItems> _myList = new ObservableCollection<listItems>();
public static ObservableCollection<listItems> myList
{
get { return _myList; }
}
private static string _status;
public class listItems : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([System.Runtime.CompilerServices.CallerMemberName] string propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public int id { get; set; }
public string status
{
get { return _status; }
set
{
if (_status != value)
{
_status = value;
OnPropertyChanged();
}
}
}
}
}
マイmainWindow.xaml.cs
public MainWindow()
{
InitializeComponent();
dataGrid.ItemsSource = listView.myList;
}
private void create_btn_Click(object sender, RoutedEventArgs e)
{
lvl.status = "Task ready to start";
var repeat = int.Parse(taskNumber.Text);
addTasks(repeat);
run_btn.IsEnabled = true;
create_btn.IsEnabled = false;
taskNumber.IsEnabled = false;
}
private void run_btn_Click(object sender, RoutedEventArgs e)
{
foreach (var Task in myTasks)
{
Task.Start();
}
}
public void addTasks(int repeatCount)
{
List<Task> myTasks = pTask.tasks();
for (int i = 0; i < repeatCount; i++)
{
lvl.id++;
int x = lvl.id;
myTasks.Add(new Task(() => p.myAction(x)));
listView.myList.Add(new listView.listItems
{
id = lvl.id,
status = lvl.status,
});
}
}
、その後は、ここで更新する行STATUS
を見つけることupdateStatus
を呼び出す私のmethod
です。
public static Action<int> myAction = x => doMethod(x);
public static void doMethod(int rowIndex)
{
updateStatus(rowIndex, "testing");
}
public static void updateStatus(int row, string text)
{
listView.myList[row].status = text;
}
私はX
に渡されるvalue
がそれぞれiteration
を更新するために、私のdatagrid
にのみ最後の行を引き起こし更新取得されているので、これは動作していないと思われますか?
task method
のrow index
がそれぞれtask index
に一致するように代替のオプションを教えてください。
おかげで
PS:私は自分が...あなたのlistView
クラスで
静的である間に 'myAction'を' p'のインスタンスとしてどのように呼び出すのか分かりません。 –
申し訳ありませんが、コードはうまくいきます。唯一の問題は、複数の「タスク」があり、それらをすべて同時に実行する場合です。 ** 1 **の行/ステータスのみが更新され、活発に変更されます。他の 'tasks'は更新されず、' variable'' 'X'が各繰り返しを更新しているためです。私は 'タスク'が 'X 'の'値 'をそのまま取り込んでいると思ったが、これはそうではないようだ。 – m00shii