Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行时调整窗体大小时未运行C#窗体代码和事件_C#_Performance_Forms_Resize_Runtime - Fatal编程技术网

运行时调整窗体大小时未运行C#窗体代码和事件

运行时调整窗体大小时未运行C#窗体代码和事件,c#,performance,forms,resize,runtime,C#,Performance,Forms,Resize,Runtime,我已经尝试过双缓冲表单-但是当我在运行时拖动表单的边或角以调整其大小时,控件不会更新,计时器事件也不会触发,直到我停止使用鼠标调整表单大小为止 表单由tabcontrol中包含的datagridview和一些声音组成。除非我在运行时调整窗口(窗体)的大小,否则一切都会正常运行。这不是世界末日,只是奇怪的行为 这就好像在调整窗体大小时,窗体上的所有事件和处理都被挂起,或者调整大小事件正在耗尽所有处理器(事实并非如此)。当用户调整窗口窗体的大小时,是否有方法强制执行事件处理 作为一个简单的例子,表单

我已经尝试过双缓冲表单-但是当我在运行时拖动表单的边或角以调整其大小时,控件不会更新,计时器事件也不会触发,直到我停止使用鼠标调整表单大小为止

表单由tabcontrol中包含的datagridview和一些声音组成。除非我在运行时调整窗口(窗体)的大小,否则一切都会正常运行。这不是世界末日,只是奇怪的行为

这就好像在调整窗体大小时,窗体上的所有事件和处理都被挂起,或者调整大小事件正在耗尽所有处理器(事实并非如此)。当用户调整窗口窗体的大小时,是否有方法强制执行事件处理


作为一个简单的例子,表单每500毫秒播放一次声音。如果在运行时我拖动窗口的下角或一侧以调整其大小,则在我停止调整窗口大小之前(通过释放鼠标单击或不移动鼠标),不会播放声音。

您有跨线程问题,或者您在同一线程中执行所有操作并阻塞线程。您需要将GUI功能与所有其他功能分开。MVVM(Model,View,ViewModel)模式更适合您的情况。非常准确。调整大小,在实际执行调整大小时,几乎会阻塞UI线程本身。如果声音处理和计时器等都与UI处理位于同一线程上,那么它将具有您刚才描述的确切行为。调整大小不会阻止UI线程。当用户拖动角落时,Windows会启动一个模式消息循环,它会像正常情况一样发送消息。与ShowDialog()的基本思想相同。计时器不停地滴答作响,绘画仍在进行。从这个问题上看,你是如何得到博肯的还完全不清楚。除了播放声音的定时器控件之外,所有的控件都从表单中删除了,我得到了同样的问题。在不断拖动鼠标以调整窗体大小时,计时器事件不会播放声音。这就好像调整大小会完全阻止线程,直到窗体大小稳定为止(即使尚未释放鼠标)。由于某种原因,调整大小模式循环不会处理计时器滴答事件。不确定这是否是一个优先事项。