![](/img/trans.png)
[英]How can I tell if my method is being called by a different thread than the main UI one?
[英]How can I run UI on a thread other than the Main UI thread in .net?
我知道有关此还有其他问题,但是大多数最终答案都不是我要建议的。 因此,我知道您不应该这样做。 这个问题的原因是我仍然想这样做,我该怎么做...
这就是为什么我要违反规则...
假设我有一个复杂的应用程序,它是版本1,我们希望我们的客户在发生崩溃或挂起时向我们提交错误。 现在让我们说一下,他们单击要提交报告的主表单的顶部有一个按钮。
现在让我们想象一下应用程序由于死锁而挂起了...
如果那小部分的UI和该按钮的处理程序可以驻留在主ui线程以外的线程上,以免陷入僵局,那将是很好的。 单击后,它将收集其他线程的所有调用堆栈,并将它们提交给我们的错误报告服务。
现在,知道了这种情况,可以在.net中完成吗?
是的,在“主线程”之外的其他线程上创建UI并没有什么魔术。 始终牢记的重要规则是在创建UI的线程上与该UI进行交互。
不过,我仍然认为您是从错误的角度进行攻击。 您可能应该改为将所有工作推离主线程。 这样,您可以最大程度地降低该线程冻结的风险,然后您就不必使用非传统的解决方案来报告错误了。
我在非主线程上创建表单的情况有很多种,每次都可以正常工作。
创建一个新的Thread
,并显示一个Form
。 将为该线程创建新的消息循环,一切运行正常。
您将使用什么魔术来从崩溃的应用程序和锁定的主线程中收集数据,这取决于您:)
听起来您想保持UI处于活动状态,即使某些其他操作陷入了僵局。 如果是这样,也许将使用异步编程 。 使用异步管理潜在的挂断任务将使应用程序的其余部分保持响应。
我们希望客户在崩溃或挂起时向我们提交错误
如果进行检测/报告,您还可以考虑添加某种程度的数据,以便无需用户输入即可获得此数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.