我有一個WPF應用程序,我嘗試在幾個虛擬機上安裝。在每個64位Windows上,它工作正常,但在每個32位窗口中,WPF應用程序UI的反應都很笨拙。在32位Windows 7和Windows 8.1上的WPF渲染問題
在32位機器上WPF應用程序有什麼特別的嗎?
我有一個WPF應用程序,我嘗試在幾個虛擬機上安裝。在每個64位Windows上,它工作正常,但在每個32位窗口中,WPF應用程序UI的反應都很笨拙。在32位Windows 7和Windows 8.1上的WPF渲染問題
在32位機器上WPF應用程序有什麼特別的嗎?
由於@swiszcz鉛,我設法解決在Win 7和Win 8.1 x86的VM呈現問題通過添加下面的代碼上的應用程序啓動方法:
RenderOptions.ProcessRenderMode = System.Windows.Interop.RenderMode.SoftwareOnly;
編輯:是完全最佳,我現在檢查程序是在物理機器上還是在虛擬機上運行。在虛擬機上,我將RenderMode設置爲SoftwareOnly,並在物理機上將RenderMode設置爲Default。
下面是代碼這樣做:
public partial class App : Application
{
public App()
{
Startup += Application_Startup;
Exit += Application_Exit;
InitializeComponent();
}
/// <summary>
/// Detect if the local machine is a virtual or a physical one
/// </summary>
/// <returns>True if the local machine is virtual, False if the local machine is physical</returns>
private bool IsVirtualMachine()
{
using (var searcher = new System.Management.ManagementObjectSearcher("Select * from Win32_ComputerSystem"))
{
using (var items = searcher.Get())
{
foreach (var item in items)
{
string manufacturer = item["Manufacturer"].ToString().ToLower();
if ((manufacturer == "microsoft corporation" && item["Model"].ToString().ToUpperInvariant().Contains("VIRTUAL"))
|| manufacturer.Contains("vmware")
|| item["Model"].ToString() == "VirtualBox")
{
return true;
}
// Check "HypervisorPresent" property, which is available in some cases.
var hypervisorPresentProperty
= item.Properties
.OfType<PropertyData>()
.FirstOrDefault(p => p.Name == "HypervisorPresent");
if ((bool?)hypervisorPresentProperty?.Value == true)
{
return true;
}
}
}
}
return false;
}
private void Application_Startup(object sender, StartupEventArgs e)
{
//Alter the rendering for the virtual machine (see Bug
if (this.IsVirtualMachine())
RenderOptions.ProcessRenderMode = System.Windows.Interop.RenderMode.SoftwareOnly;
else
RenderOptions.ProcessRenderMode = System.Windows.Interop.RenderMode.Default;
}
}
您應該注意,即使是具有問題視頻卡驅動程序的物理機器也可能讓WPF應用程序受到影響。因此,您應該爲最終用戶提供配置軟件渲染的方法,而不僅僅是硬代碼。 –
也許你是對的,我會考慮讓它通過.config文件管理,而不是最終用戶參數,但確實是高級支持用戶會做的事情。 Thx讓我意識到這個問題 –
我假設您正在使用部署的Click Once選項,您需要首先檢查您的所有依賴關係,並確保所有的依賴關係都與x86兼容,如果他們進入您的項目屬性,請確保在Build有平臺目標確保任何CPU被檢查。這是我開始的地方。
其實我正在使用WIX來安裝所有的依賴關係。我將檢查構建設置 –
所有項目已在Build/Platform Target屬性中設置爲x86。它可以在任何x64 Windows上正常工作。是否有可能與虛擬機連接?我不知道在真實安裝中是否會出現htis問題......並且我無法繼續使用它 –
支票DOTNET版本 –
究竟你的意思由*「UI響應笨拙」 *? – bassfader
我有一個Windows移動樣式的應用程序。當我點擊一個菜單按鈕時,界面的一部分發生了變化,剩下的不用,但是其他部分會在你用鼠標指針輸入時顯示出來。 –