首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >COMException问题

COMException问题
EN

Stack Overflow用户
提问于 2010-12-27 18:58:28
回答 1查看 2.2K关注 0票数 0

不知道有没有人能帮我解决这个问题。下面是代码,代码后面是异常抛出位置的解释。

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Web;
using WatiN.Core;
using System.Threading;
using System.IO;

namespace WindowsFormsApplication1
{
public partial class Form1 : System.Windows.Forms.Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {


    }

    private void button1_Click(object sender, EventArgs e)
    {
        Thread t = new Thread(createApplications);
        Settings.AutoStartDialogWatcher = false;
        t.SetApartmentState(System.Threading.ApartmentState.STA);
        t.Start();
    }

    private void createApplications()
    {
        createApp("username", "password", "Test App", "This is just a test description", "http:/mysite.com");
    }

    private void createApp(String username, String password, String appName, String description, String appUrl) {
        var currentBrowser = new IE("http://mysite.com/login/php");

        currentBrowser.TextField(Find.ById("username")).TypeText(username);
        currentBrowser.TextField(Find.ById("password")).TypeText(password);
        currentBrowser.Button(Find.ById("submit")).Click();

        currentBrowser.GoTo("http://mysite.com/createmusicapp.php");

        currentBrowser.TextField(Find.ById("application_name")).TypeText(appName);
        currentBrowser.TextField(Find.ById("application_description")).TypeText(description);
        currentBrowser.TextField(Find.ById("application_url")).TypeText(appUrl);

        currentBrowser.RadioButton(Find.ById("client_application_desktop_1")).Click();
        currentBrowser.RadioButton(Find.ById("client_application_is_writable_1")).Click();

        WatiN.Core.Image captchaImage = currentBrowser.Div(Find.ById("recaptcha_image")).Image(Find.ByStyle("display", "block"));

        Form2 captcha = new Form2(captchaImage.Src);
        captcha.ShowDialog();
    }
}

}

异常在下面这一行抛出:

代码语言:javascript
复制
currentBrowser.TextField(Find.ById("username")).TypeText(username);

但是,当它到达这一行时,它会被抛出:

代码语言:javascript
复制
captcha.ShowDialog();

它登录并填写应用程序详细信息,Form2加载正常,但一旦加载,大约2-3秒后就会发生异常。我想知道这是不是和线程有关?但如果是这样我就不知道该怎么解决了。

抛出的完整异常是:

代码语言:javascript
复制
The object invoked has disconnected from its clients. (Exception from HRESULT: 0x80010108 (RPC_E_DISCONNECTED))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-27 19:49:57

得到!由于你的线程的原因,在windows开发中,微软不建议使用线程访问用户界面。如果确实需要,可以使用mutex来避免两个或更多线程同时访问相同的UI元素。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4538208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档