VB.net可以多线程控制同一个窗体及其控件吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VB.net可以多线程控制同一个窗体及其控件吗相关的知识,希望对你有一定的参考价值。

不可以,但是能够在主线程的基础上调用委托(Invoke)。(主线程会被占用)
例子:
Dim thr As Threading.Thread
Public Delegate Sub VoidDelegate()
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
thr = New Threading.Thread(AddressOf Where)
thr.Start()
End Sub
Public Sub Where()
Me.BeginInvoke(New VoidDelegate(AddressOf WhereThr))
End Sub
Public Sub WhereThr()
Me.TextBox.text="0123456789"

End Sub
(Invoke)这种情况下,主线程被占用,所有由主线程执行程序,都将被(wherethr函数执行结束)后执行。
参考技术A 把你想控制的空间的Modifiers的属性设置成Public 之后就可以控制这个控件了 如图 代码: WCAD004N01 WCAD004N_02 = new WCAD004N01(); WCAD004N_02.tabControl1.TabPages.RemoveAt(0); WCAD004N_02.Text = "转课"; WCAD004N_02.ShowDialog();

我可以在本地主机(ASP.NET Web 窗体)下测试我的 IPN 侦听器 VB.NET 代码吗?

【中文标题】我可以在本地主机(ASP.NET Web 窗体)下测试我的 IPN 侦听器 VB.NET 代码吗?【英文标题】:Can I test my IPN listener VB.NET code under localhost (ASP.NET Web Forms)? 【发布时间】:2021-11-15 04:06:00 【问题描述】:

PayPal IPN Testing 页面的“本地开发测试”部分暗示可以通过 localhost 测试您的 IPN 侦听器代码,使用测试页面模拟来自 PayPal 的消息。

我的 TestIPN.aspx 页面包含以下标记,它似乎遵循 PayPal 提供的示例,但是当我在 Firefox 中在 localhost 下(通过 Visual Studio 2019)打开它并单击提交查询按钮时,我得到一个“文件不是发现 https://localhost:44390/PayPal/IPNHandler.aspx.vb 的错误。

不用说,IPNHandler.aspx.vb 确实存在于我的 PayPal 文件夹中(在我的测试页面的表单标签中使用 "PayPal/IPNHandler.aspx"没有不同)。当我在我的实时网站上运行它时,我也会遇到同样的错误。

任何有关如何调试此问题的指导将不胜感激。

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Test IPN message</title>
</head>
<body>
 <!--
 <form target="_new" method="post" action="https://www.YourDomain.com/Path/YourIPNHandler.php">    
 -->
    <form target="_new" method="post" action="PayPal/IPNHandler.aspx.vb">
      <input type="hidden" name="receiver_email" value="admin%40mysite.co.uk"/>
      <input type="hidden" name="business" value="admin%40mysite.co.uk"/>
      <input type="hidden" name="first_name" value="Fred"/>
      <input type="hidden" name="last_name" value="Bloggs"/>
      <input type="hidden" name="payer_email" value="fred.bloggs%40gmail.com"/>
      <input type="hidden" name="address_city" value="Southampton"/>
      <input type="hidden" name="payment_type" value="instant"/>
      <input type="hidden" name="payment_date" value="19:54:19 Apr 12, 2021 GMT"/>
      <input type="hidden" name="payment_status" value="Completed"/>
      <input type="hidden" name="mc_currency" value="GBP"/>
      <input type="hidden" name="mc_gross" value="5.00"/>
      <input type="hidden" name="custom" value="25"/>

      <input type="submit"/>

    </form>
</body>
</html>

【问题讨论】:

【参考方案1】:

我收到 https://localhost:44390/PayPal/IPNHandler.aspx.vb 的“找不到文件”错误

那是正确的端口吗?如果在 URL 栏中输入 https://localhost:44390/PayPal/IPNHandler.aspx.vb 会发生什么?使用适用于 localhost 上的处理程序的 URL,它不会返回 404。相应地设置 action

考虑使用类似https://ngrok.com 的东西进行测试。


为什么还要集成 IPN?它已经有 20 年左右的历史了,您应该使用的当前 PayPal Checkout 集成不需要它...

按照Set up standard payments 指南在您的服务器上创建两条路线,一条用于“创建订单”,一条用于“捕获订单”documented here。两个路由都应该只返回 JSON 数据(没有 HTML 或文本)。在第二条路线中,当捕获 API 成功时,您应该将其生成的付款详细信息存储在您的数据库中(特别是 purchase_units[0].payments.captures[0].id,这是 PayPal 交易 ID)并执行任何必要的业务逻辑(例如发送确认电子邮件或预订产品)立即将您的返回 JSON 转发给前端调用者。

将这 2 条路由与前端审批流程配对:https://developer.paypal.com/demo/checkout/#/pattern/server

【讨论】:

您好 Preston,感谢您抽出宝贵时间回答我的问题。我必须承认,我对表单操作显然需要访问不打算供用户查看的处理程序页面感到困惑。尝试使用 URL localhost:44390/PayPal/IPNHandler.aspx.vb 似乎永远不会奏效。使用 php(我对此一无所知)时可能情况有所不同,这是 PayPal 的原始示例 IPN 消息所假设的。 仅用于模拟/测试目的。通过提交测试表单,您正在模拟 PayPal 向您的 IPN 通知/侦听器 URL 发送的消息。 我最好的建议仍然是不要将 IPN 用于任何事情并切换到当前的 PayPal Checkout 集成(请参阅上面的设置标准付款指南) 我的目标是使用 IPN,因为这对我来说是 2008 年成功运行多年的网站。我最近的搜索还表明 IPN 仍然是推荐的解决方案。但是,我现在将仔细研究您提到的替代方案。 您的第二个 PayPal 链接似乎取决于我为 PayPal Commerce 平台付费。我正在为一个小型非营利组织开发一个网站,以便更容易支付会员费。我需要一个免费的解决方案。

以上是关于VB.net可以多线程控制同一个窗体及其控件吗的主要内容,如果未能解决你的问题,请参考以下文章

线程概念及多线程控制

linux多线程控制详述

多线程控制讲解与代码实现

VB.NET如何使控件不能响应KeyDown事件

vb.net: 一个用户控件,把它放在窗体中,当拖动它时,窗体也随之移动,这样这个窗体就不需要标题栏来拖动了

VB.NET 在线程里用textbox,提示 线程间操作无效: 从不是创建控件“TextBox2”的线程访问它