gpt4 book ai didi

c# - 在 GUI 窗体和线程 sleep 上设置一些东西

转载 作者:行者123 更新时间:2023-11-30 15:07:41 27 4
gpt4 key购买 nike

我有一个 GUI 窗口窗体。我想将图像设置为 pictureBox,然后再休眠 3 秒。

   pictureBox.Image = image;
Thread.Sleep( 3000 );

但是如果我像上面的代码那样做,我的表单会尝试设置图像,然后进入休眠状态 3 秒,紧接着我的表单会自行绘制。所以我的照片在这 3 秒后显示。我怎样才能设置图像,显示它,然后就“去 sleep ”?

编辑1

正是我想做这样的事情:

我有两个线程,UI 和 GUI。 UI 从网络套接字读取并从 GUI 调用正确的方法。并且可以是这样的脚本:

  • GUI 上的 UI 调用:设置图像
  • UI 对 GUI 的调用:做某事(然后 GUI 必须清晰图像)

但我想确定,我将能够看到这张图片。所以在 GUI 设置图像之后,我调用这个线程 3 秒。那么,我该怎么做呢?

例子:(来自 GUI 的功能)

public void f1() {
MethodInvoker method = () => {
pictureBox.Image = image;
pictureBox.Update();
// do something more
};

if ( InvokeRequired ) {
Invoke( method );
} else {
method();
}

}

public void f2() {
MethodInvoker method = () => {
pictureBox.Image = null;
pictureBox.Update();
// do something more
};

if ( InvokeRequired ) {
Invoke( method );
} else {
method();
}

}

和其他函数f3...fn

 public void f3() {
MethodInvoker method = () => {
// do something
};

if ( InvokeRequired ) {
Invoke( method );
} else {
method();
}

}

然后,我的 UI 线程调用函数 f1,然后调用函数 f2,我想确保我的用户能够看到这张图片。但是如果我的 UI 线程调用函数 f1 和 f3..fn 之间的一些调用它正常。

编辑2

不,我是这样说的:我以 GUI 形式定义函数(由 UI 调用):

  public void f1() {
MethodInvoker method = () => {
pictureBox.Image = image;
pictureBox.Update();
};

MethodInvoker method2 = () => {
// something
}

if ( InvokeRequired ) {
Invoke( method );
Thread.Sleep( 3000 ); // sleep UI thread
Invoke( method2 );
} else {
method();
method2();
}
}

它有效,但不是最佳解决方案。如果是这样的脚本:

- UI call f1
- UI call f3

UI 会休眠 3 秒,我没想到。

我的问题的最佳解决方案是什么?

最佳答案

你不应该让你的 GUI 休眠。至少不是你正在做的方式。如果您使用 Thread.Sleep 或其他阻塞机制,您将阻止 UI 执行它应该执行的操作;调度和处理消息。

如果您真的想要延迟操作,那么您最好使用 System.Windows.Forms.Timer。这是我认为你需要做的。这当然是基于我对你所说的“去 sleep ”的模糊理解。

  • 设置图片。
  • 然后立即禁用所有模拟“休眠”对您意味着什么的必要控制。
  • 然后开始计时。
  • 最后,在 Tick 事件中添加代码来反转“进入休眠”对您意味着什么。

关于c# - 在 GUI 窗体和线程 sleep 上设置一些东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6350706/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com