- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经解决了几十个问题和教程,但最终却一无所获
我希望得到你们的帮助。
我有一个BW,正在做一些繁重的工作(提供服务,将它们保存到文件中)。
BW在运行时初始化,并通过单击按钮启动。这是完美的,但是事情是不间断的,或者直到单击事件btn_cancel
从而停止BW为止。
我想要实现的是通过单击按钮再次启动bw_doWork
,但是只能在指定的时间段内工作。第一次完成doWork()
最多需要30秒,然后大约需要10秒。我尝试使用秒表,但到目前为止没有成功。
到目前为止,我的代码如下所示:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
// Do not access the form's BackgroundWorker reference directly.
// Instead, use the reference provided by the sender parameter.
long targetTime = (long) e.Argument;
Stopwatch sw = new Stopwatch();
if (targetTime > 0)
{
sw.Start();
}
while (true)
{
if ((targetTime > 0) && (sw.ElapsedMilliseconds >= targetTime))
{
BackgroundWorker bw = sender as BackgroundWorker;
while (!bw.CancellationPending)
{
GetServicesToFile();
}
sw.Reset();
sw.Start();
}
}
}
private void btnServiceLoad_Click(object sender, EventArgs e)
{
// sw.Start();
if (backgroundWorker1.IsBusy != true)
{
this.backgroundWorker1.RunWorkerAsync();
}
ReadServicesFromFile();
}
最佳答案
通过以System.Windows.Forms.Timer
开头的BackgroundWorker
对此进行管理,您可以自由初始化其延迟,并且其第一个Tick
事件会取消BackgroundWorker
。您也可以通过按钮取消。有帮助吗?
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
public partial class TimedBGWTest:Form {
static int p=0;
static Timer t;
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new TimedBGWTest());
}
public TimedBGWTest() {
InitializeComponent();
t=new Timer() { Interval=2000 };
t.Tick+=t_Tick;
}
// Buttons
private void buttonStart_Click(object sender,EventArgs e) {
t.Stop();
t.Start();
if(bgw.IsBusy) return;
buttonCancel.BackColor=Color.IndianRed;
buttonCancel.Enabled=true;
}
private void buttonCancel_Click(object sender,EventArgs e) {
bgw.CancelAsync();
t.Stop();
}
// Timer
void t_Tick(object sender, EventArgs e) {
bgw.CancelAsync();
(sender as Timer).Stop();
}
// Background worker
private void bgw_DoWork(object sender,DoWorkEventArgs e) {
while(!bgw.CancellationPending) {
if(++p>100) p=0;
bgw.ReportProgress(p);
System.Threading.Thread.Sleep(200);
}
}
private void bgw_ProgressChanged(object sender,ProgressChangedEventArgs e) {
progressBar1.Value=e.ProgressPercentage;
}
private void bgw_RunWorkerCompleted(object sender,RunWorkerCompletedEventArgs e) {
buttonCancel.BackColor=Color.LightGray;
buttonCancel.Enabled=false;
}
}
.Designer.cs
的GUI代码
关于c# - 后台工作人员在指定时间后停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30754814/
是否有用于手动测试的代码覆盖工具?比如我新写了30行代码,编译,然后运行,有什么办法可以快速验证这30行都运行了吗? 另外,后来,在我将代码 checkin 正式版本后,有什么方法可以验证测试部门在进
老实说,这是一个家庭作业问题,但我已经浪费了好几个小时,而且无法正确解决。它返回错误数量的结果或错误的数据: 我需要选择参与指导电影和/或在电影中表演的每个人以及他们所做的次数,如果至少 5 次。 有
我正在尝试测试 MacOS 的应用内购买。输入测试用户凭据后,App Store 提示:“当前收据无效或 ds 人员 ID 不匹配。”并且购买失败。 最佳答案 我尝试了很多方法来解决这个问题。 Get
我正在为 Jenkins 使用 ActiveDirectory 插件,因此用户必须使用他们的凭据登录到 Jenkins。然后用户在 Jenkins 中被称为 joe.doe,这很完美。 当同一个人 c
如何从 Infopath 人员/组选取器检索电子邮件地址?当我将人员/组选取器添加到 infopath 表单时,我只得到 3 个字段 DisplayName、AccountId、AccountType
在 Snow Leopard 中,可以在 iCal 事件中显示空闲/忙碌时间。我搜索了 CalStore.framework 的 header ,但找不到任何描述该字段的属性。如何检索日历事件的忙/闲
是否有人成功地从专门针对 SharePoint 2013 的新建或编辑表单中获取用户(个人或组)字段的值? 我已经尝试了通过搜索互联网找到的所有解决方案以及我自己能想到的所有解决方案,所有结果都为空白
所以我需要将一个 Twitter 帐户添加到 ABRecordRef 中。然而,最快的方法似乎是获取社交资料属性的多值引用,创建它的可变版本,查找它是否有 Twitter 条目,如果已经有,则创建
我正在尝试将使用 Tomcat(最初是 5.5,但可以与 7 一起使用)在 MyEclipse 中开发的应用程序部署到我们的演示服务器 (Sun Java Web Server 7)。不幸的是,所有设
我是一名优秀的程序员,十分优秀!