返回首页

。 简介HTML5的
作为新的W3C标准,多媒体,丰富的图形,动画和丰富的Web应用程序的功能是支持,HTML5的出现带来了一个原生的跨平台的Web应用纳入无插件很酷的东西新一代的承诺。插件和专有的运行时间和视频格式,其所有的主流浏览器通过大规模的独立性,在行业带来了许多观察家预测不仅Silverlight的消亡,而且还闪光。微软IE9支持大部分的HTML5特性,如火狐,Chrome,Safari浏览器,歌剧,和移动浏览器。jQuery和HTML5
未来的RIA开发利用HTML5的当,出现许多障碍,越来越复杂显著。如您想获取Web应用程序的工作完全可以很复杂,耗时和令人沮丧的的。
JavaScript框架在浏览器中的抽象与沟通发挥了重要作用,和jQuery是目前最流行的所有这些的。最新的jQuery函数库提供了有效的功能,动态地写HTML5代码功能的开发。这样的开发是左一个简单得多的命令集工作。VWG ProStudio。NETHTML5
随着视觉的WebGUI ProStudio NETHTML5推出,HTML5的权力扩展到数据处理 - 抽象了Ajax的连接和数据绑定的复杂性,没有服务器端的数据绑定的复杂性。

视觉的WebGUI ProStudio。NETHTML5模板机制是基于Gizmox创建JQT项目,可用{A1}。这台发动机重量轻替代的XSLT机制。它使更广泛的浏览器的支持和更高的效率。
在Visual WebGUI中ProStudio。NETHTML5的发展是一个独特的终端到终端的纯微软的结合。NET开发,通过jQuery的JavaScript / HTML5功能的抽象和抽象的Ajax,数据库连接和数据绑定。随着释放ProStudio。NETHTML5,来到生命的唯一总的开发环境,使程序员可以开发高效运行,数据中心的Web HTML5的应用程序在Visual Studio。
在本文中我将演示如何使用jQuery和CSS3一个完整的定制的HTML5实施,并纳入与Visual WebGUI中丰富的客户端。样本范围
,我们将看到如何利用一个jQuery的实施和幻灯片放映(传送带)内VWG的应用程序中使用它。
所有相关的源文件下载{A2}部分在文章的结尾。样本要求必需的工具
视觉的WebGUI ProStudio。NETHTML5的Beta 1或更高版本。根据微软的Visual Studio 2005/2008/2010版本选择安装。支持的浏览器

是Mozilla Firefox 4
的Safari 5
虽然IE9支持HTML5特性,它不支持HTML4的功能。因此,它不是一个样品推荐的浏览器。样品 - 原始的实现
下面的例子是一个简单的幻灯片显示(传送带)实施。它基本上是一个使用jQuery和CSS3操纵的div元素的代表性。
{S0}
您可以浏览到{A3}。 CSS相关属性
{S1}
过渡相关的功能:定义滑动,倾斜和缩放
{S2}初始化幻灯片
{S3} 处理键向下
{S4}的样品 - 预期成果
我们要纳入VWG的Webmail示例应用程序内的原jQue​​ry的实施。 webmail应用程序是一个模仿MS Office 2010中的Outlook(可见线上{A4})的Web UI。
我们的目标是提供一种替代电子邮件默认的邮件列表视图。这种替代将实际的幻灯片放映(旋转木马),如上图所示,数据绑定到一个DB的所有电子邮件数据。默认视图和新的替代之间的切换将通过视图子菜单。ListView中
{五}幻灯片
{中六}示例 - 创建自定义控件
我们选择了最适合本地控制VWG TabControl的绑定的TabPages将作为一个幻灯片放映显示幻灯片放映的行为。
首先,我们创建两种类型ContentFlow和ContentFlowItem TabControl和TabPage的继承。ContentFlow
继承与TabControl的一些差异,从服务器端代码和客户端代码。服务器端隐藏TapPages属性,并改变返回类型到一个新的类型??ContentFlowItemCollection,这是一个内部类和继承TabPageCollection定义。覆盖Focusable属性返回true覆盖CreateTabPageCollection()方法,而不是返回TabPageCollection ContentFlowItemCollection。客户端
我们定义一个皮肤类来保存ContentFlow类,称为ContentFlowSkin的客户资源。这个类继承自TabControlSkin类。然后通过设计师,我们执行以下操作:添加幻灯片显示。js文件和CSS的幻灯片文件作为皮肤的额外资源。原来的jQuery实施和CSS保持不变。皮肤的资源添加CSS文件
{七}皮肤的资源添加JavaScript文件
{S8}添加一个新JQT.js的文件将包含新的模板实现。这JQT文件是匹配的标记元素和绘制实际的HTML元素的模板文件。
在这里,我们定义如下:一个"匹配??ContentFlow和ContentFlowItem标签模板
{S9}为ContentFlow格内的每个ContentFlowItem HTML的div元素。此外,我们为每个元素分配类和样式属性。
{S10}我们还呼吁在我们原来的jQuery实现定义幻灯片()功能。
{S11}
我们可以选择从基类的现有JQT实施呢??TabControl的,和编辑的代码,我们看到合适的。例如,我们可以禁止无关渲染等实际TabControl的身体或标签头。
由于皮肤能够TabControl的仍处于发展,否则,我们将需要获得的TabControl JQT代码。
有两种方法:下载Visual WebGUI中ProStudio与来源NETHTML5。所有Visual WebGUI中SDK的来源下载。从主题项目的资源:到您的项目添加一个视觉的WebGUI主题
{S12}在主题设计中打开它,资源下拉选择控件树的左侧,然后选择脚本的TabControl
{S13}打开的JQT文件 注:类似皮肤管理如上所述,我们也可以覆盖资源,创造我们自己的主题查看{A5}

回答

评论会员:skigh 时间:2012/01/27
好吧,我工作的事,对于那些正在寻找一个,解决类似的问题。

矿包括创建一个专用的线程,等待发出mciSendString命令。基本上,它遵循的生产者/消费者模式,生产者和消费者commnuicate的一个专门的对象的锁。

public class mciTest

  private mciConsumerThread as Thread

 

  public sub new()

    ' The consumer side is started in its own thread

    ' create one from where the mciSendString method gets called

    mciConsumerThread = New Thread(AddressOf threadedMCIconsumer)

    mciConsumerThread.IsBackground = True

    mciConsumerThread.Start()

  end sub

 

  Private Sub threadedMCIconsumer()

    Do

        SyncLock MonitorLock

            ' wait for relase of MonitorLock object;

            ' when this statement exits, a new mciCommand

            ' has been issued

            Monitor.Wait(MonitorLock)

            ' the object has been released, so make the mci call

            ' from this thread and put the return value into the

            ' syncMciResult field

            If syncMciCommand <> "" Then

                syncMciResult = MciSendString(syncMciCommand, Nothing, 0, IntPtr.Zero)

            End If

            ' tell the other thread that a result has been obtained.

            Monitor.Pulse(MonitorLock) ' [This exits the Monitor.wait(MonitorLock) 

                                       ' command on the other thread.]

            ' start loop all over again, waiting for the next command.

        End SyncLock

    Loop

    ' As this is a background-thread, the loop exits

    ' when the thread is aborted from outside.

  End Sub

 



  ' The producer is the command being called instead of issuing 

  ' mciSendString directly:



  Public Function mciReplacement(ByVal Command As String) As Integer

 

    Dim nonLockedReturn as Integer ' this will be the return value



    SyncLock MonitorLock

        ' The MonitorObject has been freed temporarily by the 

        ' threadedMCIconsumer thread.

        ' Grab the syncMciCommand variable and memorize the mciCommand

        syncMciCommand = Command

 

        ' Release the MonitorObject, so the other thread 

        ' can process the mciSendString

        Monitor.Pulse(MonitorLock) ' [This exits the Monitor.wait(MonitorLock) command 

                                   ' on the other thread.]

        

        ' Now wait until the mci-thread signals the arrival of the result.

        Monitor.Wait(MonitorLock)

        ' result has been written into syncMciResult

        nonLockedReturn = syncMciResult

    End SyncLock

 

    ' use nonLockedReturn to get the result safely out of SyncLock

    Return nonLockedReturn

  End Function

 

  'The synced variables need to be defined

  Private MonitorLock as new Object()

  Private mciReturnValue As Integer

  Private syncMciCommand as String

 

End Class

为了使线程安全调用媒体控制接口(MCI),使用上面的类如下:

Dim cMci as new mciTest()

cMci.mciReplacement("open ""C:\test.wav"" type waveaudio alias audiofile")

cMci.mciReplacement("play audiofile")

cMci.mciReplacement("pause audiofile")

cMci.mciReplacement("resume audiofile")

评论会员:Simon_Whale 时间:2012/01/27
从阅读这个CP的文章,看来问题是争夺同一对象的线程2。有一个读这里的文章{A6}]