热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:图片框可见性中的动画gif随委托子和后台线程而变化

篇首语:本文由编程笔记#小编为大家整理,主要介绍了图片框可见性中的动画gif随委托子和后台线程而变化相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了图片框可见性中的动画gif随委托子和后台线程而变化相关的知识,希望对你有一定的参考价值。



我有一个主要形式的Telerik RadRibbonBar,其中有许多按钮。其中一些按钮使窗体中的某些面板可见,这些面板填充除RadRibbonBar及其按钮之外的所有主要窗体。

这些面板有一些动态计算的形式,它们需要0到2-3分钟才能打开。因此,我们决定在面板和带有动画gif的PictureBox之间放置一个表单。我的问题是,一旦我用动画gif将新形式设置为.visible = False,我就无法从图片框中获取动画gif。

我在这里放了一些代码,看看是否有人可以帮助我。

Public Sub MICommand1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MICommand1.Click
cargando = True
makevisiblePanel(1)
azkenpanelzenbakia = 1
cargando = False
End Sub
Public Sub MICommand2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MICommand2.Click
cargando = True
makevisiblePanel(2)
azkenpanelzenbakia = 2
cargando = False
End Sub

等等许多其他按钮。现在makevisiblePanel(byval面板为整数)

Private Sub makevisiblePanel(ByVal panel As Integer)
rf.Visible = True
If Not loaded Then
makeeverypanelInvisible()
firstCallPanelInLoad(panel)
rf.Visible = False
Else
makeeverypanelInvisible()
backgroundworkerRA(panel)
End If
End Sub

后台工作程序的定义如下:

Private Sub backgroundworkerRA(ByVal panel As Integer)
Dim t As New Threading.Thread(Sub() selectVisiblePanel(zein))
t.IsBackground = True
t.Start()
End Sub
Private Sub selectVisiblePanel(ByVal zein As Integer)
selectVisiblePanel_threadasko_rf()
Select Case zein
Case 0
selectVisiblePanel_threadasko_P10()
selectVisiblePanel_threadasko_Rp()
Case 1
selectVisiblePanel_threadasko_P1()
selectVisiblePanel_threadasko_Rd1()
'Some lot more cases
End Select
selectVisiblePanel_threadasko_rf_v(False)
Select Case zein
Case 0
selectVisiblePanel_threadasko_P10Front()
Case 1
selectVisiblePanel_threadasko_P1Front()
'Lots more cases
End Select
End Sub

我首先看到面板可见,然后用send.toBack将它们放在表格的背面,然后在让我的面板不可见之后我将它们放回到前面。

像这样每个selectVisiblePanel都有一个Delegate Sub和一个Panel#number.Visible = True。像这样:

Delegate Sub rfCallBack()
Private Sub selectVisiblePanel_threadasko_rf()
If Me.rf.InvokeRequired Then
Dim d As New rfCallBack(AddressOf selectVisiblePanel_threadasko_rf)
Me.Invoke(d, New Object() {})
Else
Me.rf.WindowState = FormWindowState.Maximized
End If
End Sub
Delegate Sub rf_vCallBack(ByVal vf As Boolean)
Private Sub selectVisiblePanel_threadasko_rf_v(ByVal vf As Boolean)
If Me.rf.InvokeRequired Then
Dim d As New rf_vCallBack(AddressOf selectVisiblePanel_threadasko_rf_v)
Me.Invoke(d, New Object() {vf})
Else
Me.rf.Visible = vf
End If
End Sub
Delegate Sub P1CallBack()
Private Sub selectVisiblePanel_threadasko_P1()
If Me.Panel1.InvokeRequired Then
Dim d As New P1CallBack(AddressOf selectVisiblePanel_threadasko_P1)
Me.Invoke(d, New Object() {})
Else
Me.Panel1.Visible = True
Me.Panel1.SendToBack()
End If
End Sub
Delegate Sub RD1CallBack()
Private Sub selectVisiblePanel_threadasko_Rd1()
If Me.RadDock1.InvokeRequired Then
Dim d As New P1CallBack(AddressOf selectVisiblePanel_threadasko_Rd1)
Me.Invoke(d, New Object() {})
Else
Me.RadDock1.Visible = True
End If
End Sub

我希望在我使用的新表单中可以在PictureBox中看到.gif,但我只是在创建主表单时看到它。当我点击RadribbonBar中的任何一个按钮时,我只看到面板但我没有看到PictureBox。

我在一个简单的应用程序中使用更简单的代码,我用它来进行快速调试。

如果有人能帮助我,我会很高兴。

What I get

What I would like to get


答案

我找到了问题的答案。我在面板中打开了新表格。每个小组都有4-5个新表格。我想用带有gif的pictureBox显示我的面板,而后面板中的其他表单正在加载。

在WinForms中,您不能使用backgroundWorker在doWork部分中加载表单/面板,或者在主线程负责新表单的另一个线程中。 https://msdn.microsoft.com/es-es/library/system.componentmodel.backgroundworker(v=vs.110).aspx

我必须做一个解决方法,并在我的面板中加载的每个表单中使用多线程或后台工作程序。这样我就可以为面板中的每个表单显示一次图片框,而不是面板中所有表单的1。

我希望其他人能从我的麻烦中得到帮助。

工作面板示例:

Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
'''''''' Here I load my dtgas and dting that can take up to 2 min to load from DB.
Dim dtgas as System.Data.DataSet = loadFromDB(dataBeg, dataEnd)
Dim dting as System.Data.DataSet = loadFromDB(dataBeg, dataEnd)
Dim obj(1) As Object
obj(0) = dtgas
obj(1) = dting
'System.Threading.Thread.Sleep(10000)
e.Result = obj
dtgas.Dispose()
dting.Dispose()
End Sub
Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
'get the answer from the dowork with e.result
Dim r(1) As Object
If e.[Error] IsNot Nothing Then
Exit Sub
End If
r = e.Result
If r IsNot Nothing Then
Showradcharviewtotals(r(0), r(1))
End If 'Make the RadChartView Visible and then the panel with the image not visible
RCVListA.Visible = True
Panel11.Visible = False
End Sub

在加载或从load调用的子函数中:

Private Sub CalledFromLoad_MyDataLoad()
RCVListA.Visible = False
Panel11.Dock = DockStyle.Fill
Panel11.Visible = True
BackgroundWorker1.RunWorkerAsync()
End Sub


推荐阅读
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • JavaScript 基础语法指南
    本文详细介绍了 JavaScript 的基础语法,包括变量、数据类型、运算符、语句和函数等内容,旨在为初学者提供全面的入门指导。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 闭包函数,即匿名函数,在PHP中通过Closure类表示。本文将探讨如何访问闭包内的static、this及parameter等关键属性。 ... [详细]
  • 本文介绍了一个项目中如何在Windows平台上实现多声道音频数据的采集,特别是针对DANTE音频接口的8路立体声音频通道。文章详细描述了使用Windows底层音频API进行音频采集的方法,并提供了一个具体的实现示例。 ... [详细]
  • MainActivityimportandroid.app.Activity;importandroid.os.Bundle;importandroid.os.Handler;im ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
  • 本文详细介绍了如何在 Objective-C 中使用 @public 和 @protected 修饰符来控制类成员的访问权限。同时,探讨了点语法和箭头操作符的区别,以及属性声明和实现的自动生成。 ... [详细]
  • 本文介绍了如何在多线程环境中实现异步任务的事务控制,确保任务执行的一致性和可靠性。通过使用计数器和异常标记字段,系统能够准确判断所有异步线程的执行结果,并根据结果决定是否回滚或提交事务。 ... [详细]
  • CentOS 6.8 上安装 Oracle 10.2.0.1 的常见问题及解决方案
    本文记录了在 CentOS 6.8 系统上安装 Oracle 10.2.0.1 数据库时遇到的问题及解决方法,包括依赖库缺失、操作系统版本不兼容、用户权限不足等问题。 ... [详细]
  • 本文将详细探讨 Java 中提供的不可变集合(如 `Collections.unmodifiableXXX`)和同步集合(如 `Collections.synchronizedXXX`)的实现原理及使用方法,帮助开发者更好地理解和应用这些工具。 ... [详细]
  • js常用方法(1)startWithJava代码varstartsWithfunction(str,regex){if(regexundefined||strundefined|| ... [详细]
  • Android中解析XML文件的实践指南
    本文详细介绍了在Android应用开发中解析XML文件的方法,包括从本地文件和网络资源获取XML文件的不同途径,以及使用DOM、SAX和PULL三种解析方式的具体实现。 ... [详细]
  • Node.js 中 GET 和 POST 请求的数据处理
    本文详细介绍了如何在 Node.js 中使用 GET 和 POST 方法来处理客户端发送的数据。通过示例代码展示了如何解析 URL 参数和表单数据,并提供了完整的实现步骤。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有