我在后台工作线程上运行一系列耗时的操作.在不同的阶段,我通过调用委托更新(窗体)进度条.但是,在一行代码中会发生一次更多的时间操作.
是否有可能 :
a)在执行该单行代码时更新UI,或者至少显示一个动画图标,显示用户正在完成工作.
b)让用户在执行该单行代码时取消后台工作线程
我一直在背景工作线程中处理事件处理.
我遇到的所有文档都让我相信,当DoWork事件处理程序抛出异常时,应该在RunWorkerCompleted处理程序中处理异常,并且该异常将在RunWorkerCompletedEventArgs的Error属性中可用.
这很好,但在调试期间,我总是看到用户代码消息未处理的异常.这让我相信我的方法存在问题.
我应该采取什么措施来解决这个问题?
此致,乔纳森
我即将发布具有常见网络功能(消息,墙壁等)的rails应用程序.我想使用某种后台处理(很可能是Bj)来从请求/响应周期中卸载任务.
当用户通过电子邮件邀请朋友加入和收发电子邮件时,就会发生这种情况
我不确定是否应该在我的数据库中删除这些邀请和通知,使用模型,然后每隔x分钟使用一个工作进程处理它,或者我是否应该使用Amazon SQS,存储消息并邀请那里并让我的工作人员从Amazon SQS检索它以进行处理(发送邀请/通知).
亚马逊的方法会从我的数据库中卸载,但我想从那里检索消息的速度较慢.
你怎么看?
ruby-on-rails backgroundworker amazon-sqs amazon-web-services
我有这段代码:
private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
remplirDataGrid();
}
private void frmChercherActesLoad(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
private void remplirDataGrid()
{
dataGridView1.DataSource = ActeServices.getAllActes(0, 40);
dataGridView1.Columns[0].Visible = false;
dataGridView1.Columns[1].HeaderText = "Code acte";
dataGridView1.Columns[2].HeaderText = "Désignation";
dataGridView1.Columns[3].HeaderText = "Pris en charge";
dataGridView1.Columns[4].HeaderText = "Id article";
dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
}
Run Code Online (Sandbox Code Playgroud)
这是方法getAllActe:
public static IEnumerable<Acte> getAllActes(int skipCount, int takeCount)
{
var myTableAdapter = new SmartDocDALServices.SmartDocDataSetTableAdapters.actesTableAdapter();
myTableAdapter.Fill(myDataSet.actes);
var myResult = from q in myDataSet.actes.AsEnumerable()
select new Acte
{
code = q.code,
designation …Run Code Online (Sandbox Code Playgroud) 我有背景工作者的严重问题.如果任务正常结束,代码正在工作.当我取消后台任务时,我在e.Result的RunWorkerCompleted函数中得到一个system.invalidoperationexception.怎么了?谢谢.
这是我的鳕鱼:
private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
if (backgroundWorker.CancellationPending == true)
e.Cancel = true;
e.Result = resultList;
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
List<Object> resultList = (List<Object>)e.Result;
}
Run Code Online (Sandbox Code Playgroud) 我使用这个函数来搜索所选目录中的所有exe文件:
public static IEnumerable<string> GetFiles(string root, string searchPattern)
{
Stack<string> pending = new Stack<string>();
pending.Push(root);
while (pending.Count != 0)
{
var path = pending.Pop();
string[] next = null;
try
{
next = Directory.GetFiles(path, searchPattern);
}
catch { }
if (next != null && next.Length != 0)
foreach (var file in next) yield return file;
try
{
next = Directory.GetDirectories(path);
foreach (var subdir in next) pending.Push(subdir);
}
catch { }
}
}
Run Code Online (Sandbox Code Playgroud)
如何根据找到的文件数更新进度条状态?
为什么UI在从分离的线程调用的文本框中冻结
private void button1_Click(object sender, EventArgs e)
{
Thread t1 = new Thread(DoStuff);
t1.Start();
}
void DoStuff()
{
using (var wc = new System.Net.WebClient())
{
string page_src = wc.DownloadString("http://bing.com");
textBox1.Invoke((MethodInvoker)delegate() { textBox1.Text = page_src; }); // freezes while textbox text is changing
}
}
Run Code Online (Sandbox Code Playgroud)
同时backgroundworker工作得很好 - UI不会冻结
private void button1_Click(object sender, EventArgs e)
{
BackgroundWorker bw1 = new BackgroundWorker();
bw1.DoWork += (a, b) => { DoStuff(); };
bw1.RunWorkerAsync();
}
void DoStuff()
{
using (var wc = new System.Net.WebClient())
{
string …Run Code Online (Sandbox Code Playgroud) 我想知道什么用于需要很多性能的任务.
Backgroundworker,Thread还是ThreadPool?
到目前为止,我一直在使用Threads,但我需要提高应用程序的速度.
我是ruby的新手,并认为重建一个我在C#中创建的简单聊天程序是个好主意.
我正在使用Ruby 2.0.0 MRI(Matz的Ruby实现).
问题是我希望在服务器运行时为简单的服务器命令提供I/O. 这是从示例中获取的服务器.我添加了使用gets()获取输入的命令方法.我希望这个方法在后台运行作为一个线程,但该线程阻止了另一个线程.
require 'socket' # Get sockets from stdlib
server = TCPServer.open(2000) # Socket to listen on port 2000
def commands
x = 1
while x == 1
exitProgram = gets.chomp
if exitProgram == "exit" || exitProgram == "Exit"
x = 2
abort("Exiting the program.")
end
end
end
def main
Thread.start(commands)
Thread.start(server.accept)
loop { # Servers run forever
Thread.start(server.accept) do |client|
client.puts(Time.now.ctime) # Send the time to the client
client.puts "Closing the connection. Bye!"
client.close # …Run Code Online (Sandbox Code Playgroud) 我很难找到有关Xamarin.Forms的后台任务支持的文档.Xamarin.Forms是否为定期后台任务提供支持?
我需要为Windows Phone 10和Android实现这一点.
backgroundworker ×10
c# ×5
winforms ×2
.net ×1
amazon-sqs ×1
chat ×1
data-binding ×1
datagridview ×1
debugging ×1
file-search ×1
freeze ×1
performance ×1
progress-bar ×1
ruby ×1
threadpool ×1
xamarin ×1