我们在一个相当大而复杂的桌面应用程序中遇到了一些问题,其中使用Microsoft Ribbon for WPF(或与此相关的组合)会导致计算机挂起.
下面的简化代码似乎触发了许多计算机上的Windows挂起情况.有些计算机每次都会遇到这种情况,有些人永远不会体验到它.挂起将在某些计算机上使整个会话锁定(包括num lock和大写锁定),但在其他计算机上,鼠标仍会移动(num lock仍然停止运行).当计算机无响应时,远程登录和网络共享似乎仍然有效,但无法结束控制台会话.
简而言之,似乎是行为的根本原因是几件事的结合:
我们后来WS_EX_COMPOSITED只使用了几个选定的表单来解决这个问题,但我非常想了解这个问题的根本原因.
我还没有找到一种直接的方法来重现挂起,但这个最小的应用程序似乎通过做一些最大化/恢复并将鼠标悬停在功能区按钮上方来完成业务,至少在某些机器上完成.
以下代码编译为x86 .NET 4.0,针对Microsoft WPF功能区 .NET 4.0库.
using System;
using System.Windows.Forms;
using Microsoft.Windows.Controls.Ribbon;
using System.Windows.Interop;
using System.Windows.Forms.Integration;
namespace WindowsRibbonHang
{
public class Form1 : Form
{
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED
return cp;
}
}
public Form1()
{
Ribbon ribbon = new Ribbon();
RibbonTab tab = new RibbonTab { Header = …Run Code Online (Sandbox Code Playgroud) 我最近在某些机器上遇到了以下异常.
未处理的异常:System.MissingMethodException:找不到方法:'Void System.Xml.Xsl.XslCompiledTransform.Transform(System.Xml.XPath.IXPathNavigable,System.Xml.Xsl.XsltArgumentList,System.Xml.XmlWriter,System.Xml.XmlResolver )".
从这个错误可以清楚地看出,我们正在尝试在System.Xml.Xsl.XslCompiledTransform不存在的类上使用方法.
该错误似乎与Windows XP计算机隔离,无论是否存在.NET Framework 4.0,但在我尝试过的Windows 7计算机上都可以运行(所有计算机都有3.5和4.0).
阅读文档,我们可以看到这里使用的签名在.NET 4.0中可用,但不是更早.
在新的.NET 3.5控制台应用程序中使用以下代码,我尝试用几种不同的方式编译项目.
using System;
using System.Xml.XPath;
using System.Xml.Xsl;
namespace SystemXmlTestTool
{
class Program
{
static void Main(string[] args)
{
var transform = new XslCompiledTransform();
try
{
transform.Transform((IXPathNavigable)null, null, null, null);
}
catch (Exception e)
{
Console.WriteLine(e.GetType().Name);
Console.WriteLine(e.Message);
}
Console.ReadKey();
}
}
}
Run Code Online (Sandbox Code Playgroud)
通过运行
C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe /target:clean
C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe /target:build
Run Code Online (Sandbox Code Playgroud)
在Windows 7机器上(以及通过Visual Studio 2010进行编译),项目将成功编译.
如果我在Windows XP机器上安装了同样的程序(也安装了.NET Framework 4.0),我会收到编译器警告,告诉我很明显.
这一切归结为的问题是; 为什么Windows 7机器上的Visual Studio 2010/MSBuild(多个)允许我在我的代码中使用此方法,而它不应该出现在.NET Framwork 3.5中?
我怀疑我的环境有问题,但我不知道为什么.
PHP:如何替换用""替换的HTML标签?
使用以下代码:
$str = 'line1<div>line2</div>line3';
echo strip_tags($str);
Run Code Online (Sandbox Code Playgroud)
我明白了
line1line2line3
Run Code Online (Sandbox Code Playgroud)
但预期的结果是
line1 line2 line3
Run Code Online (Sandbox Code Playgroud)
谢谢