c#winform使用 httpwebrequest请求和httpwebresponse响应,速度有时很慢,不知道是啥原因!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#winform使用 httpwebrequest请求和httpwebresponse响应,速度有时很慢,不知道是啥原因!相关的知识,希望对你有一定的参考价值。

有没有更快的访问网页的方法,用socket会不会比较好,求c# socket http协议get和post源码,能带cookies的更好!

参考技术A 你可以另开thread做访问网页的工作,页面不阻塞。这样用户体验还好就行了 参考技术B httpwebrequest ---->http 协议本回答被提问者采纳 参考技术C 多半是网络原因,用浏览器访问试试就知道了

如何使用c#winforms将参数传递到Powershell脚本?

我想通过winforms执行powershell脚本并获得格式正确的输出。我设法使其正常工作,但现在我需要将参数传递给脚本。我无法做到这一点。

这是我的RunScript函数:

        private string RunScript(string scriptFile)
        {
            Runspace runSpace = RunspaceFactory.CreateRunspace();
            runSpace.Open();
            Pipeline pipeLine = runSpace.CreatePipeline();
            Command script = new Command(scriptFile);
            script.Parameters.Add("COM_USERNAME", usernameBox.Text);
            script.Parameters.Add("COM_PASSWORD", passwordBox.Text);
            script.Parameters.Add("installDir", installDirBox.Text);
            script.Parameters.Add("TEMPVAULT_PATH", tempVaultBox.Text);
            script.Parameters.Add("MAX_REQ_LIMIT", maxReqLimBox.Text);
            script.Parameters.Add("MAX_BUFF_LIMIT", maxBuffLimBox.Text);
            pipeLine.Commands.AddScript(script.ToString());
            pipeLine.Commands.Add("Out-String");
            Collection<PSObject> results = pipeLine.Invoke();
            runSpace.Close();

            StringBuilder strBuilder = new StringBuilder();
            foreach (PSObject item in results)
            {
                strBuilder.AppendLine(item.ToString());
            }

            return strBuilder.ToString();
        }

这是我正在尝试的脚本:

param (
  [bool]   $STARTSERVICE = $false ,
  [bool]   $INSTALL = $false ,
  [bool]   $INSTALL_DASHBOARD = $false,
  [bool]   $DASHBOARD_SETTINGS = $false,
  [bool]   $DASHBOARD_CREATENEWDB = $false,
  [bool]   $DALIM_SETTINGS = $false,
  [bool]   $INSTALLIIS = $true,
  [bool]   $FIRST_INSTALL = $true,
  [bool]   $RECOVERY = $false,
  [string] $COM_USERNAME,
  [string] $COM_PASSWORD,
  [string] $RECOVERY_ADM_NAME,
  [string] $RECOVERY_ADM_PWD,
  [string] $Windows2012DVDLetter = "F:",
  [string] $COM_UNCPATH,
  [string] $installDir = "C:Program FilesLascom",
  [string] $TEMPVAULT_PATH = "C:TempVault",
  $SOAP_MaxPostSize = 4294967295,
  $MAX_REQ_LIMIT = 500000000,
  $MAX_BUFF_LIMIT = 500000000

)

Write-Output "`nUsername = " $COM_USERNAME
Write-Output "`nPassword = " $COM_PASSWORD
Write-Output "`nCOM_UNCPATH = " $COM_UNCPATH
Write-Output "`nMaximum Request Limit = " $MAX_REQ_LIMIT
Write-Output "`nMaximum Buff Limit = " $MAX_BUFF_LIMIT
Write-Output "`nIsFirstInstall = " $FIRST_INSTALL
Write-Output "`nInstallation Directory = " $installDir
Write-Output "`nTempVault Path = " $TEMPVAULT_PATH
Write-Output "`nRestriction level = " $RESTRICT_LVL

我的输出仅显示脚本值中的预注册值,但我尝试显示的内容(文本框输入)不显示。我错过了什么吗?

答案

您可以大大简化您的调用:

private string RunScript(string scriptFile)
{
  using (var ps = PowerShell.Create()) {
    ps.AddCommand(scriptFile)
        .AddParameter("COM_USERNAME", usernameBox.Text)
        .AddParameter("COM_PASSWORD", passwordBox.Text)
        .AddParameter("installDir", installDirBox.Text)
        .AddParameter("TEMPVAULT_PATH", tempVaultBox.Text)
        .AddParameter("MAX_REQ_LIMIT", maxReqLimBox.Text)
        .AddParameter("MAX_BUFF_LIMIT", maxBuffLimBox.Text)
      .AddCommand('Out-String');
    return ps.Invoke()[0].ToString();
  }
} 

使用PowerShell.Create()创建一个PowerShell实例,该实例基于隐式创建的运行空间提供更高级别的API:

  • 方法可以链接。
  • 反复调用.AddCommand()会自动添加新的管道段。

关于您尝试了什么

pipeLine.Commands.AddScript(script.ToString());

.AddScript()方法用于添加任意的PowerShell代码,而不用于添加具有关联参数的Command实例。

通过用Command对存储在script中的.ToString()实例进行字符串化,您实际上只是将脚本路径作为要执行的命令-用.AddParameter()添加的所有参数都是丢失

相反,您应该如下添加您的Command实例:

pipeLine.Commands.Add(script)

以上是关于c#winform使用 httpwebrequest请求和httpwebresponse响应,速度有时很慢,不知道是啥原因!的主要内容,如果未能解决你的问题,请参考以下文章

C#winform中使用多个Combobox但不让他们有任何关联

c#winform使用WebBrowser 大全

如何使用c#winform从mysql db中检索所有数据

c#使用VSTO插件的Winform控件保持Excel响应

C#winform中数据列表显示(急)

在C#winform中如何遍历子窗体中所有的控件