2016-11-23 44 views
2

我目前使用这种方法很慢,它完美的作品:的Process.Start是

public static void CreateEmailInDefaultMailEditor(string to, string subject, string body) 
{ 
    Process.Start($"mailto:{to}?subject={subject}&body={body}");   
} 

然后我尝试了另一台计算机上和它的工作也有,但它是非常缓慢的(更是一分钟打开我的邮件编辑器!)。
我调试了Process.Start(在System.dll中)方法,发现问题在于运行非常缓慢的NativeMethod.ShellExecuteEx方法。

我也注意到,指定应打开发送电子邮件

public static void CreateEmailInOutlook(string to, string subject, string body) 
{ 
    Process.Start("outlook.exe", $"mailto:{to}?subject={subject}&body={body}");   
} 

程序的名称可以解决问题,但不并解释为什么它在电脑上正常工作,而不是在其他它不会做同样的事情:不指定程序会自动打开默认的程序。

所以问题很简单:为什么这种行为以及如何解决它?

+1

倾向于给反恶意软件一个伟大的。所以暂时禁用它,然后再试一次,看看它是不是罪魁祸首。 –

+0

与汉斯达成协议后,手动启动任何安装AV的Outlook需要一段时间。特别是如果你有插入到Outlook中的插件。 –

+0

没有指定程序,* shell *必须在注册表中找到合适的程序。那里可能会有不一致,从而导致速度减慢。 – MrPaulch

回答

0

谢谢你的回答&评论。

这里一个小更新的问题和可能解决方案(我还没有完全确定什么问题了): 我可以重现的问题我测试我的部门的每一个计算机(而不是只有两个如我的问题所述)。几天后,我注意到一切都恢复正常。我没有更改我的程序代码,也没有停用防病毒软件。

我没有在我的问题中提到过(我认为这不重要),是所有电脑都是新的。我认为这可能是问题所在:Windows有一个索引服务,我可以想象,在开始时,可​​能需要几天时间才能扫描整个计算机。在这种情况下,搜索默认邮件管理器可能需要很长时间,但索引服务完成其工作后,搜索默认邮件管理器的速度又会变得很快。

0

你可能不会找到这个非常令人满意的答案。

在我看来,您通过shell启动mailto: URL的原始代码应该优于修改后的代码,该代码将假设某个特定的邮件客户端。不要专门开始outlook.exe。不保证此过程可用或可位于任何机器上。

至于糟糕表现:

“然后,我尝试在另一台计算机上...”

从这一个单一的测试,你似乎认为你的程序将大多数机器运行速度很慢,因此您需要更改某些内容。我会说这个结论为时过早。首先,在其他几台机器上测试。

  • 只有当你的假设被验证,你需要改变你的代码(即使你真的没有任何可行的替代你的原代码恕我直言)。
  • 如果事实证明,您尝试使用您的程序的另一台机器比其他机器要慢,那么它可能只是配置不正确,而不是您的程序负责解决该事实的责任。