.net Winforms应用程序挂起,但仅针对特定计算机上的特定用户?
我有一个用户不能在他的机器上运行应用程序的特定部分。只有在这台计算机上,对于这个用户,应用程序才会挂起。用户可以使用其凭据在其他计算机上成功运行它。另外,其他用户可以使用自己的凭据成功运行它 事件日志没有帮助。它只是说应用程序停止响应。我添加了一些日志记录,以查看应用程序在停止记录日志记录之前能走多远,但最后一个日志记录条目位于代码中无关紧要的部分(即显示标签) 我知道问题出在backgroundworker上,因为如果我对backgroundworker的调用进行注释,则应用程序不会挂起 可能是什么问题?在尝试了所有这些之后,我甚至不知道从哪里开始。哪些类型的问题只能针对特定机器上的特定用户?可能有以下几种:.net Winforms应用程序挂起,但仅针对特定计算机上的特定用户?,.net,winforms,user-profile,.net,Winforms,User Profile,我有一个用户不能在他的机器上运行应用程序的特定部分。只有在这台计算机上,对于这个用户,应用程序才会挂起。用户可以使用其凭据在其他计算机上成功运行它。另外,其他用户可以使用自己的凭据成功运行它 事件日志没有帮助。它只是说应用程序停止响应。我添加了一些日志记录,以查看应用程序在停止记录日志记录之前能走多远,但最后一个日志记录条目位于代码中无关紧要的部分(即显示标签) 我知道问题出在backgroundworker上,因为如果我对backgroundworker的调用进行注释,则应用程序不会挂起 可能
- 注册表项已损坏/丢失
- 文件权限问题
- 保存在用户配置文件中的设置
- 使用Process Monitor查看问题是否在相同的资源访问之后发生
- 禁用部分后台工作程序以隔离导致应用程序挂起的代码
- 注册表项已损坏/丢失
- 文件权限问题
- 保存在用户配置文件中的设置
- 使用Process Monitor查看问题是否在相同的资源访问之后发生
- 禁用部分后台工作程序以隔离导致应用程序挂起的代码
- 可能有几件事:
- 你的问题很模糊,但它让我想起了我在使用BackgroundWorker时遇到的一次随机崩溃。我有时会去几周,从来没有在这里抱怨程序崩溃,而在其他日子里,我会有10个左右的抱怨。原来我遇到的问题是由于我修改了UI。修改任何UI值(例如修改文本框的Text属性)都被视为对主线程的不安全线程调用。所有UI修改都应该发生在主线程上,而不是在DoWork方法中。如果需要修改UI,可以使用后台工作程序的ReportProgress方法,或者修改代码以检查InvokeRequired属性,请参见下文。从UI读取值不是问题,只有在设置/修改值时才有问题
private void SetText(string text)
{
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (this.textBox1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
this.textBox1.Text = text;
}
}
指
重读你的问题,这一部分对我来说很突出
它停止记录日志,但最后一个日志条目位于代码中无关紧要的部分(即显示标签)
如果在DoWork事件处理程序中修改Visible属性或修改标签的文本,这可能是您的问题。再次尝试将该代码移动到ReportProgress事件处理程序,或使用上面的InovokeRequired方法来回避这个问题。您的问题非常模糊,但它提醒我使用BackgroundWorker时遇到了一次随机崩溃。我有时会去几周,从来没有在这里抱怨程序崩溃,而在其他日子里,我会有10个左右的抱怨。原来我遇到的问题是由于我修改了UI。修改任何UI值(例如修改文本框的Text属性)都被视为对主线程的不安全线程调用。所有UI修改都应该发生在主线程上,而不是在DoWork方法中。如果需要修改UI,可以使用后台工作程序的ReportProgress方法,或者修改代码以检查InvokeRequired属性,请参见下文。从UI读取值不是问题,只有在设置/修改值时才有问题
private void SetText(string text)
{
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (this.textBox1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
this.textBox1.Text = text;
}
}
指
重读你的问题,这一部分对我来说很突出
它停止记录日志,但最后一个日志条目位于代码中无关紧要的部分(即显示标签)
如果在DoWork事件处理程序中修改Visible属性或修改标签的文本,这可能是您的问题。再次尝试将该代码移动到ReportProgress事件处理程序,或使用上面的InovokeRequired方法来解决此问题。事件日志没有帮助。它只是说应用程序停止响应。
在这些情况下,您将获得第二次机会异常(a
调试器可能捕获的第一次异常-否则是第二次
偶然)只需使用DebugDiag(它有许多规则,您可以
在挂起时捕获的内存转储上运行)。或者,您可以使用
windbg,它的核心功能相当强大,但了解基础知识是值得的
我相信你可以研究更多的信息,这是一个开始
获取更多信息的最佳网站是Tess Ferrandez:
“事件日志没有帮助。它只是说应用程序停止响应。”
在这些情况下,您将获得第二次机会异常(a
调试器可能捕获的第一次异常-否则是第二次
偶然)只需使用DebugDiag(它有许多规则,您可以
在挂起时捕获的内存转储上运行)。或者,您可以使用
windbg,它的核心功能相当强大,但了解基础知识是值得的
我相信你可以研究更多的信息,这是一个开始
获取更多信息的最佳网站是Tess Ferrandez:
这是TableAdapter。填充方法、填充绑定到UI控件的数据集、填充数据显然造成了很大的问题。我不知道为什么它不为每个人这样做
查看答案。是TableAdapter.Fill方法,填充绑定到UI控件的数据集,填充数据appa