- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
如何从单个 winforms 应用程序进程以编程方式控制多个浏览器(aXWebBrowser 控件),目标是同一个远程网站,但每个浏览器都在自己与远程站点的 session 范围内?
目标- 构建一个自动使用网站的应用程序。目标是让应用程序完成最多 5 个用户在同一网站上与浏览器交互的工作。
明显的挑战- 每个浏览器实例共享远程网站发送给它的“ session ”数据。结果是各种浏览器无法像实际的多个人类用户那样工作。无论实例化了多少个不同的 aXWebBrowser 控件,每个控件都会丢失其 session 上下文,并共享由最后一个/最新/最近实例化的浏览器建立的 session 上下文。换句话说,最后启动的控件会破坏它之前的任何控件已建立的 session 上下文。
已经尝试过- 将以下注册表项之一添加到“hkcu\software\microsoft\internet explorer\main”:TabProcGrowth=DWORD:0、FrameMerging=DWORD:0、SessionMerging=DWORD:0。当从我的桌面图标(应用程序外部)启动 IE8 时,这工作正常,IE8 的行为符合预期。但是,在运行应用程序时,使用 axWewbBrowser 控件,它确实有效,注册表设置似乎对 axWebBrowser 控件没有影响。在应用程序外部查看不良行为的其他方法包括:单击 IE8 文件菜单中的“新建 session ”,并使用 -nomerge 启动 iexplore.exe。这些在应用程序中不起作用,因为 axWebBrowser 控件使用 Wininet 进行通信。
约束- 已经使用 aXWebBrowser 控件(Internet Explorer ActiveX 可自动化 Web 浏览器)编写并运行了大量代码,因此理想的解决方案不需要使用新控件重新编写代码。- 找到解决方案后,应用程序会将浏览器窗口显示给工作站用户。- winforms 应用程序 (.NET 2.0) 正在托管控件- 浏览器都针对同一个远程网站。
最佳答案
据我所知,只要每个浏览器都在同一个线程上加载,IE 就会始终将它们视为同一个 session 。
我通过为每个 session 创建一个新线程和一个新窗口来解决这个问题。
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
private static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//// How many test windows do we need to create.
int numberOfClients = 5;
System.Threading.Thread[] threads =
new System.Threading.Thread[numberOfClients];
//// Create threads for each of the windows, and then start them.
for (int i = 0; i < numberOfClients; i++)
{
threads[i] = new System.Threading.Thread(Program.StartTest);
threads[i].SetApartmentState(System.Threading.ApartmentState.STA);
//// Passing in the startup parameters for each each instance.
threads[i].Start(new StartupParameters(i));
}
//// This will keep the application running until
//// all the windows are closed.
foreach (System.Threading.Thread thread in threads)
{
thread.Join();
}
}
/// <summary>
/// Starts the test form.
/// </summary>
/// <param name="state">
/// The state object containing our startup parameters.
/// </param>
private static void StartTest(object state)
{
StartupParameters parameters = state as StartupParameters;
YourTestForm yourTestForm = new YourTestForm();
//// Set the needed parameters before we run the form.
//// Add your parameters here.
yourTestForm.Text = string.Format("Test form {0}", parameters.Index);
//// Run the test.
Application.Run(yourTestForm);
}
}
/// <summary>
/// Contains the startup parameters used to configure
/// each new instance of the test form.
/// </summary>
public class StartupParameters
{
/// <summary>
/// Initializes a new instance of the <see cref="StartupPramitures"/> class.
/// </summary>
/// <param name="index">The index.</param>
public StartupParameters(int index)
{
this.Index = index;
}
/// <summary>
/// The index for this test form.
/// </summary>
public int Index { get; private set; }
}
关于c# - 在 WinForms 应用程序中使用 aXWebBrowser 控件分离 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/977678/
我在尝试使用 jpa2.0 将包含持久实体和分离实体(新创建的实体)的实体列表更新到我的数据库中时遇到错误。 我的实体包含在合并数据时出现错误(在标题中提到)的内部实体: Class supercla
我在分层 Pane 中有一组面板。我需要一个分隔符来将 sideBar 与 topBar 和 tabbedPanel 分开。我留了一个 10 像素的缓冲区来放置它。不幸的是,可能由于它是 JLayer
在我从数据库中读取的代码中,我还使用自定义适配器打印出每一行,该行中有一个 texttview、2 个按钮和一个 edittext。这一切都很好,但是当按下按钮时,edittext 会递增或递减,有没
我有一个由 Hibernate 4.3.4 管理的实体,它有一个其他实体的一对多集合。 在我的处理过程中,我必须分离父实体(将分离级联到子列表)。但是,当我向列表中添加一个尚未持久化的新项目并执行分离
我想追加一行,该行应该是表格的最后一行。在我的代码中,它似乎在第一次动态添加行时起作用。但是当添加其他行时它不会成为最后一行。 我总是希望“subtot”行成为最后一行,但是当我追加其他行时,它不
我试图用它们之间的空格分隔这 2 个 div(请参见图 1)。问题是当我添加边距或填充时会发生这种情况(请参见图 2)。 这是我的代码,请注意我没有使用 Bootstrap: .row { mar
我的服务器包含一些 ServerActor。该 actor 接收 RegisterClient 消息并将 ActorRefs 添加到已注册客户端列表中。 我还有多个客户端,每个客户端都包含 Clien
假设我有一个需要两个参数的函数,并且参数的顺序会影响结果。 是否可以将第一个参数传递给 partial 或 comp 函数,然后将另一个参数传递给它,如下所示: (defn bar [arg1 arg
如何搜索和分离多个后代键。 例子: (def d {:foo 123 :bar { :baz 456 :bam { :w
我正在尝试为 Slick 表创建一个类型安全的动态 DSL,但不确定如何实现这一点。 用户可以通过以 form/json 格式发送过滤器来将过滤器发布到服务器,我需要使用所有这些来构建一个 Slick
我是新来的,我发现看到充满大量函数和变量初始化以及 UI 的组件时眼睛很痛。是否可以将它们分开? 而不是默认设置,如下所示。如何将业务逻辑分离到另一个文件中? function MyComponent
我试图通过将参数粘贴在一起来使用分离。这应该是一件容易的工作,但不适合我。当我想到使用 eval(parse()) 时,我知道是时候寻求帮助了 通常,如果我加载一个包,我可以按如下方式分离它: det
(dissoc :a m)允许我解除给定的键。但是,有没有办法使用谓词函数来分离 pred 为真的任何键? (dissoc-with-pred pred? m) 所以给了一张 map - {:a 2
我编写了一个使用 devtools 来包含内部数据的包: devtools::use_data(.data, internal = T, overwrite = T) 我最近更改了该数据并重建了包。我
所以我有一个脚本,我想在我的服务器上运行它而不会打扰我。所以我想我会在 tmux 窗口中运行服务器,然后 detach这样我就可以简单地 attach如果我想查看进度(此脚本需要数天才能运行)。 但是
ThreeJS中动画数据和模型数据是否可以解耦? 这样就可以交换模型并保留动画?我认为这可能非常强大 我知道如何在 ThreeJS 中做到这一点的方法是将每个动画一个接一个地打包在一个模型中,这似乎是
我有一堆(Ruby)脚本存储在服务器上。到目前为止,我的团队通过打开一个启动脚本名称列表的访问器应用程序来使用它们,然后他们在工作文件夹中的文件上选择要在该实例中运行的脚本。脚本直接从服务器运行,因此
我想知道 javascript 如何包含在 jsp 中 - 我们是否可以在 .js 文件中放置 jsp 能够识别的任何代码,而不仅仅是 javascript 代码? 我有一些常见的 JavaScrip
您是否可以在 Dockerfile 中指定一个选项,默认使用它构建的容器以分离方式运行。 这将导致与 -d 相同的结果: docker run -d 这样 docker run 默认情况下会分离运
我正在为现有的 Java 程序开发 Java 插件。现有程序使用特定版本的 eclipse.uml2.*,我的插件也是如此。不幸的是,我的插件需要更新版本。 为了运行该插件,我需要将其导出到 Jar
我是一名优秀的程序员,十分优秀!