そのため、この質問の仕方がわかりません。それが、どこでも答えを見つけるのに問題がある理由の 1 つかもしれません。
だから私のセットアップは私がクラスを持っているということです
public class Connection
{
public static event EventHandler LogggedIn;
public static TDConnection TDC {get;set;}
public string Authenticate(){...}
public static void Login()
{
if (Connection.TDC.Connected)
{
_bw = new BackgroundWorker
{
WorkerReportsProgress = true,
WorkerSupportsCancellation = true
};
_bw.DoWork += ConnectToProject_DoWork;
_bw.RunWorkerCompleted += ConnectToProject_RunWorkerCompleted;
_bw.RunWorkerAsync(Connection.TDC);
}
}
private static void ConnectToProject_DoWork(object o, DoWorkEventArgs e)
{
Connection.TDC.ConnectProjectEx(Connection.Domain, Connection.Project, Connection.UserName, Utilities.Encryption.AESEncryption.Decrypt(Connection.Password, "fsd*#(dfs(((>>>???fdjs"));
}
private static void ConnectToProject_RunWorkerCompleted(object o, RunWorkerCompletedEventArgs e)
{
LogggedIn(null, new EventArgs());
}
}
私のメイン クラスでは、新しい Connection をインスタンス化し、Login を呼び出して、TDConnection で ALM への新しい接続を開きます。私のスレッドでは、スレッド内で既に開いているこの接続を使用したいと考えています。私が読んだことから、これを行うと、バックグラウンドワーカーの内部にいるにもかかわらず、UI スレッドでメンバーのメソッドを使用しているため、UI がブロックされます。
これを行うために私が見つけた1つの解決策:
private static void ConnectToProject_DoWork(object o, DoWorkEventArgs e)
{
TDConnection conn = new TDConnection();
conn.InitConnectionEx(QCURL);
conn.Login();
conn.ConnectProject();
e.Result = conn;
}
すでにログインしており、これを行うには余分な時間がかかるため、これを行いたくありません。
Connection.TDC を _bw.RunorkerAsync(Connection.TDC) で渡そうとしましたが、これも明らかに機能しません。
既に確立されている接続を使用して、接続中に UI をブロックしない方法はありますか?