小编gal*_*13x的帖子

处理BackGroundWorker的正确方法

这是处理BackGroundWorker的正确方法吗?我不确定在调用.Dispose()之前是否需要删除事件.还在RunWorkerCompleted委托中调用.Dispose()确定吗?

public void RunProcessAsync(DateTime dumpDate)
{
    BackgroundWorker worker = new BackgroundWorker();
    worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
    worker.DoWork += new DoWorkEventHandler(worker_DoWork);
    worker.RunWorkerAsync(dumpDate);
}

void worker_DoWork(object sender, DoWorkEventArgs e)
{
    // Do Work here
}

void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    BackgroundWorker worker = sender as BackgroundWorker;
    worker.RunWorkerCompleted -= new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
    worker.DoWork -= new DoWorkEventHandler(worker_DoWork);
    worker.Dispose();
}
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading backgroundworker

49
推荐指数
2
解决办法
4万
查看次数

确定托管与非托管资源

有关托管与非托管资源的问题很多.我理解这两者的基本定义.但是,我很难知道资源或对象何时被管理或不受管理.

当我想到非托管资源时,我倾向于认为本机代码不是.NET的直接组成部分,例如pinvoke或编组资源.我通常认为资源意味着与使用硬件的东西接口,例如文件句柄或网络连接也是不受管理的.

那些包装本机非托管资源的.NET对象呢FileStream

一个FileStream必须使用非托管资源,但是当我实现IDisposable模式,我认为这是一个管理的或者非托管资源?

到目前为止,我一直在假设如果对象实现IDisposable,那么它就被管理了.我怎么知道IntPtr应该作为非托管resoruce处理?

.net c# resources idisposable

18
推荐指数
2
解决办法
1万
查看次数

SQLite的CASE语句贵吗?

我想知道是不是建议在SQLite(或其他SQL引擎)中使用CASE语句来替换数据.例如,假设我有一个查询.

SELECT Users, 
                CASE WHEN Active = 0 THEN 'Inactive'
                        WHEN Active = 1 THEN 'Active'
                        WHEN Active = 2 THEN 'Processing'
                        ELSE 'ERROR' END AS Active
FROM UsersTable;
Run Code Online (Sandbox Code Playgroud)

何时更好地创建引用表并执行JOIN.在这种情况下,我将使用ActiveID,ActiveDescription创建一个表'ActiveStatesTable'并执行JOIN.

mysql sql sqlite

10
推荐指数
1
解决办法
9896
查看次数

高频时序.NET

我正在寻找创建一个高频回调线程.基本上我需要一个以常规高频(高达100Hz)间隔执行的功能.我意识到Windows有一个正常的线程执行切片是〜15ms.我想指定一个可以快于15ms的常规间隔.

这就是我想要完成的.我有一个需要以一定间隔发送消息的外部设备.间隔根据情况而变化.我希望我不需要超过100Hz(10ms)的消息速率.

我当然可以实现一个自旋循环,但是,我希望有一个解决方案不需要浪费太多资源.

提供的问题/答案链接无法解决此问题.虽然我同意这个问题有几种不同的问题,但实际上没有一个好的解决方案可以解决问题.

提供的大多数答案都与使用秒表和手动执行计时任务有关,这完全是CPU密集型的.唯一可行的解​​决方案是使用多媒体定时器,有一些陷阱,正如Haans所说.我找到了另一种解决方案,但我将在下面添加.我不知道此时的陷阱,但我打算做一些测试和研究.我仍然对有关解决方案的评论感兴趣.


WINAPI通过电话

BOOL WINAPI CreateTimerQueueTimer(
  _Out_     PHANDLE phNewTimer,
  _In_opt_  HANDLE TimerQueue,
  _In_      WAITORTIMERCALLBACK Callback,
  _In_opt_  PVOID Parameter,
  _In_      DWORD DueTime,
  _In_      DWORD Period,
  _In_      ULONG Flags
);
Run Code Online (Sandbox Code Playgroud)

BOOL WINAPI DeleteTimerQueueTimer(
  _In_opt_  HANDLE TimerQueue,
  _In_      HANDLE Timer,
  _In_opt_  HANDLE CompletionEvent
);
Run Code Online (Sandbox Code Playgroud)

链接 - http://msdn.microsoft.com/en-us/library/windows/desktop/ms682485%28v=vs.85%29.aspx 我正在使用PInvoke来完成此任务.但是,在处理多媒体计时器时也需要这样做.

我的PInvoke签名适合那些感兴趣的人. Pinvoke链接

[DllImport("kernel32.dll")]
static extern bool CreateTimerQueueTimer(out IntPtr phNewTimer,
   IntPtr TimerQueue, WaitOrTimerDelegate Callback, IntPtr Parameter,
   uint DueTime, uint Period, uint Flags);

// This is the callback delegate to use.
public delegate …
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading synchronization

9
推荐指数
1
解决办法
1960
查看次数

使用SQLite中的SELECT命令列出附加数据库

是否有一个SELECT命令可以列出所有附加的数据库,类似于sqlite3中提供的.database命令?

c# sqlite system.data.sqlite

8
推荐指数
1
解决办法
3163
查看次数

一个类的C#Documentation <example> <code> ... </ code> </ example>

我有一个类,我想创建一个关于如何使用的简单示例.但是,当我在类声明中使用标记时,该示例不会出现在Sandcastle输出中.它适用于对象的成员,但不适用于类本身.沙堡可以处理吗?

我想做的一个例子是.

MSDN TcpClient文档

这有一个关于如何使用该类的示例.我怎样才能在课堂上加入这样的东西?

我想这样做:

/// <summary> My example class </summary>
/// <example>
///   <code>
///      // Example code on how to use the class
///   </code>
/// </example>
public class MyClass
{
    public string MyString {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

.net c# documentation sandcastle

7
推荐指数
1
解决办法
1847
查看次数

验证两个不同表的两列完全匹配

在深层视图中编写视图和嵌套视图时,我有时会遗漏某些内容并最终丢失行/数据.如何检查两个不同表中的列是否具有完全匹配的数据?

例:

select count(distinct table1.col1)
  from table1
 where table1.col1 not in (select distinct table2.col1 
                             from table2);
Run Code Online (Sandbox Code Playgroud)

这将返回table1.col1中不在table2中的值的数量.但是,我不知道这是一个很好的解决方案,因为它不计算table1.col1中不存在的table2.col1值.

sql database sqlite select

6
推荐指数
2
解决办法
4996
查看次数

后台线程的预期 ThreadAbort

我有以下内容。

public static Thread testThread = new Thread(ThreadStart) {Name = "TestThread", IsBackground = true};
private void Form_Load()
{
    testThread.Start()
}
private static void ThreadStart()
{
    int count = 0;
    try
    {
        while (true)
        {
            count++;
        }
    }
    catch (Exception ex)
    {

        StreamWriter stream = new StreamWriter(File.OpenWrite("Exception.txt"));
        stream.WriteLine(count + "\n" + ex);
        stream.Flush();
        stream.Close();
    }
}
Run Code Online (Sandbox Code Playgroud)

当我打电话时,Thread.Abort()我捕捉到异常并写出到文件中。但是,如果我改为关闭应用程序,则不会写入任何内容。我也有

AppDomain.CurrentDomain.UnhandledException +=
   new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException);
Application.ThreadException +=
   new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
Run Code Online (Sandbox Code Playgroud)

但它似乎从未抛出异常。

我想添加一个问题是谨慎的。

当父进程退出时,正在运行的后台线程会发生什么?我的理解是抛出 ThreadAbortException 以退出线程。如果是这种情况,如何捕获 ThreadAbortException 以清理线程中可能存在的资源?

.net c# multithreading

5
推荐指数
2
解决办法
1478
查看次数

区分相同类型的异常

区分同一类型的两个异常但出于不同原因抛出的最佳方法是什么.

例如,InvalidOperationException可以抛出尝试访问空序列,但也可以在使用Concurrent对象时抛出(例如BlockingCollection)

从我的阅读中我得出结论,使用BlockingCollection.CompleteAdding()信号完成是完全正常的,因此需要捕获异常并适当处理(例如退出任务)

在不使用消息内容的情况下过滤这些内容的最佳方法是什么?

编辑:它们似乎都具有相同的HResult值.

.net c# exception-handling exception

5
推荐指数
1
解决办法
270
查看次数

通过powershell在outlook ContactItem中没有电子邮件地址

当我检查a时ContactItem,所有Email#Address值都为空.我已经尝试设置值然后打印值.此更改反映在Outlook中,但是,无法通过PowerShell检索任何值.

以下是一些片段:

$Outlook=NEW-OBJECT –comobject Outlook.Application
$Contacts=$Outlook.session.GetDefaultFolder(10).items
$Contactsfolders = $Outlook.session.GetDefaultFolder(10).Folders
$testFolder = $Contactsfolders | Where-Object {$_.Name -eq 'Test Folder'}
$testContact = $testFolder.Items(1)

echo $testContact
$testContact.Email1Address = "BobDoe3@doe.com"
echo $testContact
Run Code Online (Sandbox Code Playgroud)

这是上述执行的输出.注意我已经删除了一些不感兴趣的信息以缩短.

第一回声

Application                  : Microsoft.Office.Interop.Outlook.ApplicationClass
Class                        : 40
Session                      : Microsoft.Office.Interop.Outlook.NameSpaceClass
ConversationTopic            : John Doe
FormDescription              : System.__ComObject
GetInspector                 : System.__ComObject
Importance                   : 1
LastModificationTime         : 10/31/2017 5:57:04 PM
MAPIOBJECT                   : System.__ComObject
MessageClass                 : IPM.Contact
OutlookInternalVersion       : 154971
OutlookVersion               : 15.0
Saved                        : True
Sensitivity                  : 0
Size                         : 11614 …
Run Code Online (Sandbox Code Playgroud)

powershell outlook

5
推荐指数
1
解决办法
297
查看次数