[英]How to call a method every x seconds for x time in Xamarin Forms?
[英]Start several functions at the same time in every x seconds?
我知道如何開始在x秒后,它就像一個函數這樣 :
private Timer timer1;
public void InitTimer()
{
timer1 = new Timer();
timer1.Tick += new EventHandler(timer1_Tick);
timer1.Interval = 2000; // in miliseconds
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
function1();
function2();
function3();
}
問題在於:函數不能同時運行。 Function2
只能在Function1
完成時運行。 但是我希望它們能夠在同一時間運行。 這就是我能做到這一點的原因:
private void timer1_Tick(object sender, EventArgs e)
{
Parallel.Invoke(
() => Function1(),
() => Function2(),
() => Function3()
);
}
這是用c#做最聰明的方法嗎? 我對Parallel.Invoke
不了解:如果我的計時器設置為5秒,5秒后功能1,2和3沒有完成,但我再次調用它們。 我是否在新線程中啟動這些功能? 是否有一些調用x-threads運行function1()(同時)? 想知道真的很健康。
如果有人想獲得更多信息: function1
只是將文件x從文件夾a復制到b,則function2
只在那里讀取文件夾b中的所有文件並保存信息,而function3
僅用於檢查連接,如果有是一個連接發送適當的文件給某人。
對代碼的任何建議? 謝謝
Parallel.Invoke並行運行所有函數。 由於function2不應該在function1之前運行,因此創建一個在后台運行它們但按順序運行的任務。
Task.Factory.StartNew(() =>
{
function1();
function2();
function3();
});
如果我的計時器設置為5秒,5秒后,功能1,2和3未完成,該怎么辦?
您可以使用bool
來查看它們是否已完成。
使用System.Threading.Timer
在ThreadPool
線程上安排回調,因此您不需要創建新任務。 它還允許您控制間隔以防止回調重疊。
// fired after 5 secs, but just once.
_timer = new System.Threading.Timer(Callback, null, 5000, Timeout.Infinite);
// on the callback you must re-schedule the next callback time;
private void Callback(Object state) {
Function1();
Function2();
// schedule the next callback time
_timer.Change(5000, Timeout.Infinite);
}
你看過任務嗎?
你可以這樣做:
Task[] tasks = new Task[3];
tasks[0] = Task.Factory.StartNew(() => Function1());
tasks[1] = Task.Factory.StartNew(() => Function2());
tasks[2] = Task.Factory.StartNew(() => Function3());
Task.WaitAll(tasks);
以上將允許您並行運行這些功能,這就是您所希望的。
如果您不想在timer1_Tick
等待所有任務完成,那么不要使用WaitAll ....而是可以通過在計時器再次觸發時檢查任務上的IsCompleted來檢查任務是否已完成....然后決定是否發布下一批功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.