为了账号安全,请及时绑定邮箱和手机立即绑定

如何在运行时在代码块结束之前更改按钮的背景颜色

如何在运行时在代码块结束之前更改按钮的背景颜色

C#
缥缈止盈 2022-10-23 16:26:37
在窗口之间切换时必须使用Window Handle才能访问窗口。var selecttxt1 = Ad_Search_Direct_Link_Text.GetAttribute("value");        string getimpression = selecttxt1.Replace("C.ashx", "I.ashx");        driver.OpenInNewTab(getimpression);        driver.ClickElement(Click_Impression);        var aa = driver.Url;         Uri uri = new Uri(aa);`enter code here`         string newTabHandle = driver.WindowHandles.Last();        var newTab = driver.SwitchTo().Window(newTabHandle);        string finallandedurltext = newTab.GetComponents(UriComponents.Scheme | UriComponents.Host, UriFormat.UriEscaped);        driver.Close();希望这有帮助。
查看完整描述

3 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

这不起作用的原因是因为 Thread.Sleep() 正在阻止线程完成。


仅当应用程序不执行任何操作时,即在您的方法完成后,才会重绘窗口。如果您删除更改它的行,DarkGreen您将看到它在五秒钟后改变颜色。


您应该使用计时器来解决您的问题。


如果您愿意,您可以强制它提前刷新界面,而无需通过调用Application.DoEvents();将反映您所做的更改(例如颜色更改)离开该方法。


    button1.BackColor = Color.Lime;

    Application.DoEvents()

    Thread.Sleep(5000);

    button1.BackColor = Color.DarkGreen;

请注意,在具有用户界面的程序中放置线程睡眠是一个坏主意,但出于说明目的,它将向您展示如何使其改变颜色。


查看完整回答
反对 回复 2022-10-23
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

您的问题是因为 UI 线程被阻止。您需要在单独的线程中运行此逻辑。试试这个代码:


private async void button1_Click(object sender, EventArgs e)

{

    button1.BackColor = Color.LimeGreen;

    await Task.Run(() =>

    {

        System.Threading.Thread.Sleep(5000);

        button1.BackColor = Color.DarkGreen;

    });

}

这会将您的按钮变为LimeGreen,然后等待 5 秒钟再将其变为DarkGreen。这是有效的,因为我们在一个新线程中旋转它,因此不会锁定 UI。


查看完整回答
反对 回复 2022-10-23
?
郎朗坤

TA贡献1921条经验 获得超9个赞

我不推荐使用 Thread.Sleep() 因为它会冻结你的界面。您还需要刷新按钮以显示更改。您可以使用 async 和 wait 方法来延迟按钮颜色更改 在 button1_click 函数的 private 关键字之后添加 async 并创建 async Task 函数并使用 await awaiting() 删除 Thread.Sleep() 函数;


public partial class Form1 : Form

{

    public Form1()

{

    InitializeComponent();

}


private async void button1_Click(object sender, EventArgs e)

{

    button1.BackColor = Color.Lime;

    button1.Refresh();

    await awaiting();


    button1.BackColor = Color.DarkGreen;

}

private async Task awaiting() {

        await Task.Delay(5000);

    }

}


查看完整回答
反对 回复 2022-10-23
  • 3 回答
  • 0 关注
  • 98 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信