【问题标题】:MessageBox after service call do not act right?服务调用后的 MessageBox 不正确?
【发布时间】:2011-10-07 09:16:19
【问题描述】:

我有一个 winform 应用程序,我在其中侦听 Application_ThreadException 事件。当它被抛出时,我将对服务进行一个简单的调用(这将记录异常),当我们回到客户端时,将使用 MessageBox.Show。像这样:

this.GetMyClientService.LogException(new MyApp.DataContracts.FaultContracts.Generellt.GeneralFault(exceptionContainer));
System.Windows.Forms.MessageBox.Show("test");

问题是只要我做服务调用MessageBox.Show就不会调出申请表然后把自己放到上面吗?相反,消息框将单独显示。如果我单击托盘中的应用程序图标,将显示消息框,而不是表单?

如果我改为删除服务调用行 (GetMyClientService.Log...),则消息框将显示表单,然后将其置于其顶部。不能只调出表格(这是我需要的)。

这是为什么呢?我似乎是运行同样运行 MessageBox.Show 方法的服务调用的同一个线程?

致以最诚挚的问候

编辑1:

如果我把它改成这样:

ThreadPool.QueueUserWorkItem(new WaitCallback(LogException1), exceptionContainer);
//this.GetMyClientService.LogException(new MyApp.DataContracts.FaultContracts.Generellt.GeneralFault(exceptionContainer));

System.Windows.Forms.MessageBox.Show("test");

它也会起作用。但是一旦主 UI 线程执行服务调用,messageBox 就会关闭?

【问题讨论】:

    标签: c# winforms wcf message


    【解决方案1】:

    当您进行服务调用时,您的 UI 线程被阻塞。尝试进行异步服务调用。

    【讨论】:

    • 我的观点是 UI 线程是发出 serviceCall 的线程,因此它将被阻塞。这个没问题,我可以等。但是在 UI 线程进行服务调用之后,它应该显示消息框。这也发生了,问题是表单和消息框不能像 day do 那样一起工作 如果跳过服务调用?
    猜你喜欢
    • 2013-07-23
    • 2016-12-27
    • 2020-01-07
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 2014-08-19
    • 1970-01-01
    相关资源
    最近更新 更多