WPF,Excel AddIn,C#, 我有多个异步调用来从主线程上的Web服务获取数据,然后在回调中, 我将在Excel中绘制数据。我跟踪回调,他们也在主线程上运行。 但我仍然得到COMException 0x800AC472,谷歌搜索,这似乎是一个多线程问题。
但我很困惑为什么会这样。 我认为只有一个主线程,因为所有回调都在主线程上运行,没有理由有异常?
编辑: 在主UI线程上,单击功能区/按钮,它将调用Web服务BuildMetaData, 一旦它返回,在其回调MetaDataCompleteCallback中,将发送另一个Web服务调用 一旦它返回,在其回调DataRequestJobFinished中,它将调用plot在Excel上绘制数据。见下文
On Main UI class:
Btn_Click()
{
...
_reportObjs[index].GenerateReport();
}
在Class to GenerateReport
上public void GenerateReport()
{
Request.ParseFunction();
Request.MetacompleteCallBack = MetaDataCompleteCallback;
Request.BuildMetaData();
}
public void MetaDataCompleteCallback(int id)
{
try
{
if (Request.IsRequestCancelled)
{
Request.FormulaCell.Dispose();
return;
}
ErrorMessage = Request.ErrorMessage;
if (string.IsNullOrEmpty(Request.ErrorMessage))
{
_queryJob = new DataQueryJob(UnityContainer, Request.BuildQueryString(), DataRequestJobFinished, Request);
}
else
{
ModifyCommentOnFormulaCellPublishRefreshEvent();
}
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
ModifyCommentOnFormulaCellPublishRefreshEvent();
}
finally
{
Request.MetacompleteCallBack = null;
}
}
public void DataRequestJobFinished(DataRequestResponse response)
{
Dispatcher.Invoke(new Action<DataRequestResponse>(DataRequestJobFinishedUI), response);
}
public void DataRequestJobFinished(DataRequestResponse response)
{
try
{
if (Request.IsRequestCancelled)
{
return;
}
if (response.status != Status.COMPLETE)
{
ErrorMessage = ManipulateStatusMsg(response);
}
else // COMPLETE
{
// TODO: Convert this into factory pattern
var tmpReq = Request as DataRequest;
if (tmpReq == null) return;
new VerticalTemplate(tmpReq, response, IsOffice2003).Plot();
}
}
catch (Exception e)
{
ErrorMessage = e.Message;
MIMICShared.Helper.LogError(e);
}
finally
{
//if (token != null)
// this.UnityContainer.Resolve<IEventAggregator>().GetEvent<DataQueryJobComplete>().Unsubscribe(token);
ModifyCommentOnFormulaCellPublishRefreshEvent();
Request.FormulaCell.Dispose();
}
}
on plot class
public void Plot()
{
...
attributeRange.Value2 = headerArray;
DataRange.Value2 = ....
DataRange.NumberFormat = ...
}
答案 0 :(得分:-2)
我看到了这个stackoverflow.com/questions/5246288/errormessage-in-excel,social.msdn.microsoft.com/forums/en-US/vsto/thread / ...似乎除了等待之外没有问题的解决方案/重试。 这篇文章讨论了如何检查Excel是否在编辑中。 http://www.add-in-express.com/creating-addins-blog/2011/03/23/excel-check-user-edit-cell/