私のカスタムOutlookアドインでは、いくつかのテキストボックスとログインボタンが含まれているWPFユーザーコントロールを読み込む(ホストする)機能があります。Outlookを追加しないで別のスレッドで別のスレッドを実行する
この私のログインボタンのクリックイベントハンドラ
private void lblbtnLogin_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
try
{
//this.Dispatcher.Invoke((Action)(() =>Login()));
this.Dispatcher.InvokeAsync((Action)(() => Login()));
//Thread loginThread = new Thread(new ThreadStart(Login));
//loginThread.SetApartmentState(ApartmentState.STA);
//loginThread.IsBackground = true;
//loginThread.Start();
//th.Start();
}
catch (Exception exp)
{
string msg = exp.Message;
}
}
とloginメソッドのコードはイムがこれを実行している間、私は、ディスパッチャとしてだけでなく、新しいスレッドを試みた
ここpublic void Login()
{
try
{
if (txtWSUrl.Text == "Enter WebService URL" || txtWSUrl.Text == string.Empty)
{
MessageBox.Show("WebService URL Cannot be Empty", string.Empty, MessageBoxButton.OK);
}
else if (txtEmailId.Text == "Enter Email ID" || txtEmailId.Text == string.Empty)
{
MessageBox.Show("Email ID Cannot be Empty", string.Empty, MessageBoxButton.OK);
}
else if (txtPwd.Password == "********" || txtPwd.Password == string.Empty)
{
MessageBox.Show("Password Cannot be Empty", string.Empty, MessageBoxButton.OK);
}
else
{
Globals.ThisAddIn.url = txtWSUrl.Text;
Summit_BLL.ProxyParamDetails ppd = new Summit_BLL.ProxyParamDetails();
ppd.UserName = txtEmailId.Text;
ppd.Password = txtPwd.Password;
CommonParameters cp = new CommonParameters();
cp._ProxyDetails = ppd;
//Summit_RESTWCF rest = new Summit_RESTWCF();
//string o=rest.LoginApp(ppd);
string strJson = Newtonsoft.Json.JsonConvert.SerializeObject(cp);
string strMethod = "LoginApp";
string output = WSConsumer.GetWSResult(ref strJson, ref strMethod);
OutputParam op = Newtonsoft.Json.JsonConvert.DeserializeObject<OutputParam>(output);
if (op.Errors == string.Empty)
{
string objJson = op.Output;
AppUser obj = Newtonsoft.Json.JsonConvert.DeserializeObject<AppUser>(objJson);
if (obj.User.UserDetails.Count > 0)
{
foreach (UserDetail ud in obj.User.UserDetails)
{
}
}
//string Feedback = ConfigurationManager.AppSettings["App:RequiredFeedbackModule"].IsNotNullAndEmpty() ? ConfigurationManager.AppSettings["App:RequiredFeedbackModule"].ToString().ToUpper() : "NULL";
WPFUCMaster master = WPFUCMaster.Instance;
WPFUCHome home = new WPFUCHome();
master.AddControl(home);
//System.Windows.Threading.Dispatcher.Run();
}
else
{
MessageBox.Show(op.Errors, string.Empty, MessageBoxButton.OK);
}
}
}
catch (Exception exp)
{
string msg = exp.Message;
}
}
ですまた、次の画面が読み込まれるまでは、見通しがぶら下がったり、応答したりしません。
私は新しいスレッドを使用し、そのが異なる スレッドがそれを所有しているので、呼び出し元のスレッドがこのオブジェクトにアクセスすることはできません
のような例外をスローするコンストラクタのログイン方法を渡す場合。
誰でもこのお手伝いをしていただけますか?
これは正常ですが、UIアイテムにはアクセスできないか、具体的にはUIスレッド外から変更されます。 – BugFinder