我提前为这个问题的漫无边际道歉,但我不知道从哪里开始。
我有一个问题,我试图在Silverlight中打开一个excel文件,并对该excel文件进行一些处理......但是我在主线程上执行此操作有两个主要问题。
所以我正在尝试编写一个后台工作者来完成我的处理任务,但我找不到任何体面的例子(它们都非常简单)。背景工作者模式是否有任何资源?
当我尝试写一个时,我提出了以下问题
我无法在类级别访问变量(如果我只想要我的backgroundworker的变量,我是否应该有一个单独的backgroundworker类?)
显示消息框,暂停中间后台线程过于复杂(这是否意味着我应该有很多小背景工作者?)
与2如何显示错误消息有关。
答案 0 :(得分:2)
关于#3,您无法直接从BackgroundWorker线程执行UI。您需要做的是使用事件参数中的所有必要信息触发事件,并在UI线程上处理该事件。
因此,对于您的消息框,您将使用事件参数
中的消息触发事件public class MessageBoxEventArgs : EventArgs
{
public MessageBoxEventArgs(string message)
{
this.Message = message;
}
public string Message
{
get; private set;
}
}
解雇活动:
public event EventHandler<MessageBoxEventArgs> Message_Event;
...
if (this.Message_Event!= null)
{
this.Message_Event(this, new MessageBoxEventArgs(message));
}
然后处理它:
private void MessageEventHandler(object sender, MessageBoxEventArgs e)
{
if (this.InvokeRequired)
{
this.Invoke((MethodInvoker)delegate { MessageBox.Show(e.Message); });
}
else
{
MessageBox.Show(e.Message);
}
}