【发布时间】:2018-08-01 10:56:32
【问题描述】:
我正在开发一个 WPF-MVVM 项目,我需要在一些后台线程中实现异步无限循环。我在 ViewModel 中所做的是
public TestVM()
{
LineIO_Task();
//some other work
}
并且 LineIO_Task 被定义为
public void LineIO_Task()
{
for (int i = 0; i < 7; i++)
{
Task GetP = new Task(() => { EnPost(Lines[i]); }, TaskCreationOptions.LongRunning);
GetP.Start();
}
}
Lines 是在 TestVm 中初始化的 ObservableCollection。 EnPost 被定义为
public async void EnPost(Line l)
{
int last = 0;
while (true)
{
// do the work in the loop
int pno = l.Com.ReadPostNo();//read a serial port
if (pno != 0 && pno != last)
{
log.WriteLog(pno + " to " + l.ToString());
Dispatcher.Invoke(() =>
{
// update the UI
l.Posts.First(x => x.IsValid).Num = pno;
l.Posts.First(x => x.IsValid).IsValid = false;
LocalDb.InsertPost(l.Num, AssignedPost.ToList().Find(x => x.Num == pno));
});
pno = last;
}
await Task.Delay(500);
}
}
我试过Task.Run(() => Method()),Task.Factory.StartNew(() => Method()),,异步任务EnPost()并使用System.Timers.Timer。但无论我使用哪种方式,EnPost 方法都不会运行。我在方法中设置了断点。它没有击中那里。我是不是用错了任务?
【问题讨论】:
-
它可能正在运行,只是没有停止。你处于无限循环中。没有休息或返回。
-
@Boxed 是的,我需要它不要停止。我每 0.5 秒读取一次串口
-
但它是一个无限循环,所以永远不会到达等待。
-
@MarcGravell 对不起,它应该在循环中。我已经编辑了我的问题。
-
@BrianRudolph 这是一个错字。对不起。我已经编辑了我的问题。
标签: c# wpf task-parallel-library