System.Threading.Thread.Sleep c#

时间:2015-03-17 04:36:05

标签: c# multithreading

早上好 我正在使用C#开发pc软件 并在我的软件中使用此方法来延迟行之间的循环

System.Threading.Thread.Sleep(x);

但这会让我的软件冻结。 怎么做这个方法工作冻结我的应用程序 我的完整代码

        private  void button18_Click_3(object sender, EventArgs e)
    {

        for (int i = 0; i < lstgroups.Items.Count; i++)
        {
            //
            System.Threading.Thread.Sleep(x);
            System.Windows.Forms.Application.EnableVisualStyles();
            //
            timeless.Enabled = true;
            timeless.Start();
            duration--;
            if (duration == 0)
            {
                timeless.Start();
            }

            if (Gsend.Post(lstgroupsbox.Items[i].ToString(), AppSettings.Default.AccessToken, txtStatus.Text, txtLink.Text) == true)
            lblshow.Text = "Sent To : " + lstgroups.Items[i].Text;
            lblsendid.Text = "Sent To : " + lstgroupsbox.Items[i];
            {
                //foreach (var item in lstgroups.Items)
                //{
                //    if (Gsend.Post(item.ToString(), "", txtStatus.Text, "", 2, "", txtImagePath.Text) == true)
                //        MessageBox.Show("Post Has Been Sent");
                //}

            }

3 个答案:

答案 0 :(得分:1)

避免使用Thread.sleep(),因为它会使主线程保持给定时间,并且GUI将冻结。

其他选项

  • 以您需要的间隔(X)启动计时器。它应该没问题。
  • 使用后台工作线程,因为后台工作程序中的睡眠不会影响主GUI。

答案 1 :(得分:0)

在不是主线程的线程上完成工作。通过在事件中使用sleep,您实际上停止了对主线程的任何处理。

答案 2 :(得分:0)

也许你可以使用后台工作者

Background Worker