2015-05-23 35 views
2

当前版本中只有一个按钮闪烁。如何使用异步/等待任务动画按钮颜色?

主营:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace NEW_Flicker_Test_Async 
{ 
    public partial class Form1 : Form 
    { 
     async Task Flicker<T>(T target, TimeSpan time) where T : Control 
     { 
      for (var isWhite = true; ; isWhite = !isWhite) 
      { 
       target.BackColor = isWhite 
        ? System.Drawing.Color.White 
        : System.Drawing.Color.Black; 
       await Task.Delay(time); 
      } 
     } 

     public Form1() 
     { 
      InitializeComponent(); 

     } 

     private async void Form1_Load(object sender, EventArgs e) 
     { 
      await Flicker(button1, TimeSpan.FromMilliseconds(83)); 
      await Flicker(button2, TimeSpan.FromMilliseconds(77)); 
      await Flicker(button3, TimeSpan.FromMilliseconds(71)); 
      await Flicker(button4, TimeSpan.FromMilliseconds(66)); 
      await Flicker(button5, TimeSpan.FromMilliseconds(61)); 

     } 
    } 
} 
+0

你看到了什么,当你运行的程序?你期望看到什么? – soegaard

+0

表单没有启动,它表示准备好但不打开表单,当我运行ot @ soegaard时,我想在屏幕上闪烁的按钮。 –

+0

@soegaard现在的形式和类都在上面。 –

回答

1
using System; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

class FlickerForm 
{ 
    public static void Execute() 
    { 
    var button = new Button { Width = 200, Height = 30, Text = "Test" }; 
    var button2 = new Button { Width = 200, Height = 30, Top = 30, Text = "Test2" }; 
    var form = new Form { Width = 800, Height = 600, Controls = { button, button2 } }; 

    form.Load += async (_s, _e) => await Task.WhenAll 
    (
     Flicker(button, TimeSpan.FromSeconds(2)), 
     Flicker(button2, TimeSpan.FromSeconds(3)) 
    ); 

    Application.Run(form); 
    } 

    static async Task Flicker<T>(T target, TimeSpan period) where T:Control 
    { 
    for (var isWhite = false; ; isWhite = !isWhite) 
    { 
     target.BackColor = isWhite ? System.Drawing.Color.White : System.Drawing.Color.Black; 
     await Task.Delay(period); 
    } 
    } 
} 
+0

我应该如何实现这个?,这是一个自我形式或形式的类吗? –

+0

@AslakAøgaard这是一个完整的例子。在你的代码实现方法闪烁和闪烁调用。 –

+0

如果我需要更多按钮以及不同的时间跨度,该怎么办? –